我需要帮助找出如何在我的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
答案 0 :(得分:4)
Bugs
和Verbose
是此代码中的公共字段,而不是属性。使它们成为属性,并且应该修复它。
答案 1 :(得分:2)
为get;
和set;
属性定义Bugs
和Verbose
。这不仅会纠正(添加)验证,但将来,模型绑定器将能够从服务器上的表单字段绑定模型。
关于Verbose
的必需属性。这是因为对值类型的隐式必需验证正在发生。 string是可空的,因此如果您没有明确地设置Required
属性,则不需要它 - 因此Bugs保持不需要。但是bool
本质上不能是null
,因此mvc会自动为其添加Required
属性。您可以使用
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
答案 2 :(得分:0)
我最近遇到了同样的问题(不引人注意的客户端验证在IE中不起作用,但在其他浏览器中工作)。原因是在jQuery版本中。我从jQuery 1.6.x版本回滚到版本1.5.2,开始工作。