我使用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")
}
希望这些摘录足以识别错误......
有关为什么这不起作用的任何提示?
答案 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-required
和data-val
即可解决此问题。