2010-04-11 133 views
1

我想获得一个非常简单的客户端验证示例,以在ASP.NET MVC 2中工作。我使用数据注释来设置必需的属性“姓氏”。当我使用Html.ValidationMessageFor(x => x.Surname)时,将正确的客户端验证脚本写入页面。但是,当我使用Html.ValidationMessage(“姓氏”)时,客户端验证不会在页面发布之后呈现出来。客户端验证仅在表单发布后才开始工作!我可以看到脚本在表单发布后在页面中更新。 Html.ValidationMessage()中似乎存在一个错误?ASP.NET MVC 2客户端验证不适用于Html.ValidationMessage()?

回答

0

我还没试过,但元数据存储在proprerty中,所以只有ValidationMessageFor有能力检查prop(通过静态反射)。

另一个帮助器使用一个字符串键来访问没有任何引用属性(也没有验证元数据信息)的modelstate字典,所以我不认为Html.ValidationMessage(字符串键)有能力注入验证脚本客户端。

0

据我所知,验证需要尝试验证,即使它是客户端。

您可以尝试在GET视图中创建模型的新实例,然后在将其发送到视图之前使用TryValidateModel()。这应该会导致验证逻辑运行,从而填充客户端验证,这将导致所有必填字段显示其错误版本,但取决于您选择如何选择样式,这并不是一个大问题。

2

确保您在母版页头中引用了正确的脚本。

<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script> 
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript"></script> 
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script> 

也要看你的观点,以确保客户端验证呼叫您的形式

<% Html.EnableClientValidation(); %> 
<% using (Html.BeginForm()) {%> 
    <%= Html.ValidationSummary(true) %> 
    ... 
<% } %> 

,当然你的验证消息显示上面的问题。

<span class="editor-label"><%= Html.ValidationMessageFor(u => u.Name)%></span> 

这真的是你所需要的。我相信只有在字段中输入文本,然后将文本和标签移出字段时,必需属性才会开始检查,因此请尝试查看是否获得验证。其他人将在属性需要时验证。例如,当您超过50个字符时,[StringLength(50)]将显示一条错误消息。

+1

问题是为什么ValidationMessage(字符串键)不像ValidationMessageFor()那样工作,而不是如何使用ValidationMessageFor – 2010-04-13 17:15:19