ASP.NET MVC 2客户端验证不适用于Html.ValidationMessage()?

时间:2010-04-11 12:50:46

标签: asp.net asp.net-mvc validation data-annotations

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

3 个答案:

答案 0 :(得分: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>

这就是你真正需要的一切。我相信如果您在字段中输入文本然后从字段中删除文本和选项卡,则必需属性才会开始检查,因此请尝试查看是否获得验证。其他人将验证属性何时需要。例如,[StringLength(50)]会在超过50个字符时显示错误消息。

答案 1 :(得分:0)

我没有尝试,但元数据存储在proprerty上,因此只有ValidationMessageFor能够检查prop(通过静态反射)。

另一个帮助器使用字符串键来访问一个模型状态字典而不引用该属性(并且没有验证元数据信息),所以我不认为Html.ValidationMessage(字符串键)能够注入验证脚本客户端。

答案 2 :(得分:0)

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

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