2012-05-15 58 views
0

FINAL编辑:问题是,ViewBag.PropName == Model.PropName; FIX:ViewBag.PropName ===> ViewBag.PropName2验证问题隐藏DropDownListFor的ASP.NET MVC3

这是我第一次发布;我是新的,并认为我搞砸了布局......很抱歉! 我遇到了一些隐藏dropdownlistfor的客户端验证问题。 我正在使用ASP.NET MVC3,并且在此页面上有很多隐藏ddl。 然而,验证不适用于某些ddl。 以前有没有人有过这个问题?

这些是2属性; 1个工作,1失败

//VALIDATION FAILS 
[Required] 
[Range(0, 4)] 
public int TiresBack { get; set; } 

//VALIDATION WORKS 
[Required] 
[Range(0, 4)] 
public int TechnicalState { get; set; } 

这是一块剃刀:

<tr>//THIS DOESN'T WORK 
    <td style="width: 38%;"> 
     @txtFor("tiresBack") 
    </td> 
//This is JQuery Star-Rating. 
    <td align="center" id="starsTiresBack"> 
    </td> 
    <td>        
     @Html.DropDownListFor(model => model.TiresBack, ViewBag.TiresBack as IEnumerable<SelectListItem>, new { style = "display:none;" }) 
     <input class="blueButton" type="button" id="btnBrandRearTires" value="@txtFor("brandTiresBack")" /> 
     <span>@Html.ValidationMessageFor(model => model.TiresBack)</span> <span>@Html.ValidationMessageFor(model => model.BrandRearTires)</span> 
    </td> 
</tr> 
//THIS WORKS 
<tr> 
    <td style="width: 38%;"> 
     @txtFor("technicalState")        
    </td> 
    <td id="starsTechnicalState" align="center"> 
    </td> 
    <td> 
     @Html.DropDownListFor(model => model.TechnicalState, ViewBag.TechState as IEnumerable<SelectListItem>, new { style = "display:none;" }) 
     <input class="blueButton" type="button" id="btnTechnicalStateDescription" value="@txtFor("technicalStateDescriptionButton")" style="display:none;"/> 
     <span>@Html.ValidationMessageFor(model => model.TechnicalState)</span> <span>@Html.ValidationMessageFor(model => model.TechnicalStateDescription)</span> 
    </td> 
</tr> 

EDIT1:使用该方法在控制器初始化:

public static List<SelectListItem> CreateDefaultStateList(int? selected = -1) 
    { 
     List<SelectListItem> sl = new List<SelectListItem>(); 
     for (int i = -1; i < 5; i++) 
     { 
      SelectListItem sli = new SelectListItem(); 
      if (i == 0 || i == -1) 
       sli.Text = ""; 
      else 
       sli.Text = i.ToString(); 
      sli.Value = i.ToString(); 
      if (i == selected) 
       sli.Selected = true; 
      sl.Add(sli); 
     } 
     return sl; 
    } 

EDIT2:所述创建控制器。 defaultstatelist是从上面发布的方法返回的内容。

List<SelectListItem> defaultStateList = CreateDefaultStateList(); 

[Authorize] 
public ActionResult Create() 
{ 
    FillViewBag(); 
    ViewBag.PropX = defaultStateList; 
    ViewBag.TiresFront = defaultStateList; 
    ViewBag.TechState = defaultStateList; 
    ViewBag.PropY= defaultStateList; 
    ViewBag.PropZ= defaultStateList; 
    ViewBag.PropA= defaultStateList; 
    ViewBag.PropB= defaultStateList; 
    ViewBag.PropC= defaultStateList; 
    ViewBag.PropD= defaultStateList; 

    return View(); 
} 

键入此我注意到方法中的默认值。这可能是... ==>试过了,不是。现在将代码更新为'-1'作为默认值。

+0

如何在控制器中初始化这些属性? – Andrei

+0

@Andrei来自编辑代码的列表被放入视图包 – sander

+0

您能否显示控制器的所有代码?没有任何一种方法,bu实际分配ViewBag属性?我怀疑这些下拉菜单具有不同的初始状态 - 第一个下拉菜单选择了空值,第二个下拉菜单选择了非空值。因此他们的行为有所不同。但要确认需要实际的控制器代码。 – Andrei

回答

0

问题是ViewBag.PropName == Model.PropName; 修复:将ViewBag.PropName重命名为ViewBag.PropName2之类的东西。