使用Html.ValidateFor()帮助程序在IE7中下拉客户端验证

时间:2010-06-21 16:33:07

标签: asp.net asp.net-mvc validation asp.net-mvc-2 client-side

关于验证表单上的下拉列表,我有一个奇怪的问题。一个下拉列表是状态列表,并使用RequiredAttribute:

进行修饰
[Required(ErrorMessage="State is required.")]

在视图中,下拉列表及其验证定义为:

<%: Html.DropDownListFor(m => m.State, new SelectList(BusinessLayer.UsStates.GetList())) %>
<% Html.ValidateFor(m => m.State); %>

UsStates.GetList()返回List<string>。 我的所有客户端验证(包括下拉菜单)都可以在Firefox,Chrome甚至IE8中完美运行。但是,在IE7中,它已被破坏 - 即使在下拉列表中正确选择了一个状态(及其值显然),验证也会失败,并说“状态是必需的。”

解决了我的问题:

IE7对于未呈现每个选项的value属性这一事实并不满意。所以将List传递给SelectList()并没有削减它。您必须传入键/值对类型对象的列表,并传入DataValueField和DataTextField参数,如下所示:

<%: Html.DropDownListFor(m => m.State, new SelectList(BusinessLayer.UsStates.GetList(), "Value", "Text"))%>

那太烦人了.. :)

1 个答案:

答案 0 :(得分:1)

解决了我的问题:

IE7对于未呈现每个选项的value属性这一事实并不满意。所以将List<string>传递给SelectList()并没有削减它。您必须传入键/值对类型对象的列表,并传入DataValueField和DataTextField参数,如下所示:

<%: Html.DropDownListFor(m => m.State, new SelectList(BusinessLayer.UsStates.GetList(), "Value", "Text"))%>

那太烦人了.. :)