在这个ASP.NET MVC 3应用程序中,我缺少什么来进行不显眼的客户端验证?

时间:2011-09-01 13:43:41

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

我需要帮助找出如何在我的ASP.NET MVC 3应用程序中成功实现对字段的不显眼的客户端验证。我可以看到,基本上启用了不显眼的客户端验证 ,因为MVC会生成相关的HTML。

在这种情况下我想要实现的是在我输入时验证Bugs编辑器的输入(即相应的<input>元素),为了测试目的,我设置了属性的最大长度为2.当我测试时,我可以说当前没有进行验证,所以至少缺少某些东西。 因此,此问题的成功标准是对Bugs表单字段进行客户端验证。

我可以在生成的HTML中看到一个可能的问题:Verbose属性在模型中标记为Required,但其对应的<input>仍然获取dataval=true属性,例如,而<input>的{​​{1}}不是。不应该反过来,因为带有验证规则的字段应该Bugs,以启用不显眼的验证吗?

以下是与理解案例相关的代码,如果需要更多信息,请告诉我:

dataval=true

Options.cs

public class Options { [Required, StringLength(2)] public string Bugs; public bool Verbose; }

Options.cshtml

两个编辑器(<script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> <div id="options-form"> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Options</legend> <div class="editor-label"> @Html.LabelFor(model => model.Bugs) </div> <div class="editor-field"> @Html.EditorFor(model => model.Bugs) @Html.ValidationMessageFor(model => model.Bugs) </div> <div class="editor-label"> @Html.LabelFor(model => model.Verbose) </div> <div class="editor-field"> @Html.CheckBoxFor(model => model.Verbose) @Html.ValidationMessageFor(model => model.Verbose) </div> </fieldset> } </div> Bugs)呈现如下:

Verbose

3 个答案:

答案 0 :(得分:4)

BugsVerbose是此代码中的公共字段,而不是属性。使它们成为属性,并且应该修复它。

答案 1 :(得分:2)

get;set;属性定义BugsVerbose。这不仅会纠正(添加)验证,但将来,模型绑定器将能够从服务器上的表单字段绑定模型。

关于Verbose的必需属性。这是因为对值类型的隐式必需验证正在发生。 string是可空的,因此如果您没有明确地设置Required属性,则不需要它 - 因此Bugs保持不需要。但是bool本质上不能是null,因此mvc会自动为其添加Required属性。您可以使用

控制它
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

答案 2 :(得分:0)

我最近遇到了同样的问题(不引人注意的客户端验证在IE中不起作用,但在其他浏览器中工作)。原因是在jQuery版本中。我从jQuery 1.6.x版本回滚到版本1.5.2,开始工作。