我有一个奇怪的问题,关于在我的表单上验证下拉列表。一个下拉列表是状态列表,并用RequiredAttribute进行修饰:
[Required(ErrorMessage="State is required.")]
在视图中,下拉列表及其验证定义为:
<%: Html.DropDownListFor(m => m.State, new SelectList(BusinessLayer.UsStates.GetList())) %>
<% Html.ValidateFor(m => m.State); %>
UsStates.GetList()
返回A
List<string>
.
我所有的客户端验证(包括下拉列表)在Firefox、Chrome甚至IE8中都能很好地工作。然而,在IE7中,它是断开的——即使在下拉列表中正确选择了状态(及其值),验证也会失败并说“状态是必需的”。
解决了我的问题:
IE7对每个选项的值属性没有呈现这一事实感到不高兴。因此,将列表传递到selectList()中并没有将其剪切。必须传入键/值对类型对象的列表,并传入DataValueField和DataTextField参数,如下所示:
<%: Html.DropDownListFor(m => m.State, new SelectList(BusinessLayer.UsStates.GetList(), "Value", "Text"))%>
那真让人恼火……:)