验证MVC3中的DropDownListFor元素

时间:2011-09-28 15:32:19

标签: javascript jquery asp.net-mvc-3 validation

我使用jQuery Unobrtusive Validation和MVC3来验证DropDownListFor表单元素,但它不起作用。

如果我将DropDownListFor修改为TextBoxFor,则验证效果非常好 - 它还会验证表单的其他字段。我有多个DropDownListFor元素,基于数据库中可用的元素。因此循环。

以下是我的一些代码:

视图模型:

public class ParentViewModel  
{ 
// some other stuff here public
List<Children> Children { get; set; } 
}

public class ChildrenViewModel  
{ 
    public SelectList PossibleNames { get; set; } 
    [Required(ErrorMessage = "Select a name")] 
    public int ChosenNameId { get; set; } 
}

查看:

@for (int i = 0; i < Model.Children.Count; i++) 
{
@Html.LabelFor(model => modell.Children[i].ChosenNameId, "Name")
@Html.ValidationMessageFor(model => modell.Children[i].ChosenNameId)
@Html.DropDownListFor(model => modell.Children[i].ChosenNameId,
Model.Children[i].PossibleNames, "Choose a name") 
}

希望这些摘录足以识别错误......

有关为什么这不起作用的任何提示?

2 个答案:

答案 0 :(得分:1)

尝试更换:

[Required(ErrorMessage = "Select a name")] 
public int ChosenNameId { get; set; } 

由:

[Required(ErrorMessage = "Select a name")] 
public int? ChosenNameId { get; set; } 

注意正在使用的可空整数。在绑定可能具有非选定值的下拉列表时,您应该使用可空类型。

答案 1 :(得分:0)

我自己想出来了。这似乎是MVC3中的一个错误,导致选择列表的集合无法验证。之前已经多次讨论过这个问题,例如:

就个人而言,我只需手动手动添加data-val-requireddata-val即可解决此问题。