我需要帮助来弄清楚如何在我的 ASP.NET MVC 3 应用程序中成功实现对字段的不显眼的客户端验证。我可以看到基本上启用了不显眼的客户端验证,因为 MVC 生成相关的 HTML。
在这种情况下,我想要实现的是在我输入时验证Bugs
编辑器的输入(即相应的<input>
元素),出于测试目的,我将属性的最大长度设置为 2。当我测试时,我可以告诉目前没有进行验证,所以至少缺少一些东西。因此,此问题的成功标准是对表单字段进行客户端验证Bugs
。
我可以在生成的 HTML 中看到一个可能的问题:该Verbose
属性未标记为Required
模型中的属性,但其对应<input>
的仍然获取dataval=true
例如属性,而<input>
forBugs
没有。不应该反过来,因为具有验证规则的字段应该得到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>
两个编辑器(forBugs
和Verbose
)呈现如下:
<div id="options-form">
<form action="/Options" method="post">
<fieldset>
<legend>Options</legend>
<div class="editor-label">
<label for="Bugs">Bugs</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="Bugs" name="Bugs" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="Bugs" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="Verbose">Verbose</label>
</div>
<div class="editor-field">
<input data-val="true" data-val-required="The Boolean field is required." id="Verbose" name="Verbose" type="checkbox" value="true" /><input name="Verbose" type="hidden" value="false" />
<span class="field-validation-valid" data-valmsg-for="Verbose" data-valmsg-replace="true"></span>
</div>
</fieldset>
</form>
</div>