【问题标题】:ASP.NET MVC 2 client side validation not working for Html.ValidationMessage()?ASP.NET MVC 2 客户端验证不适用于 Html.ValidationMessage()?
【发布时间】:2011-02-06 16:55:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    <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>
    

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

    【讨论】:

    • 问题是为什么 ValidationMessage(string key) 不像 ValidationMessageFor() 那样工作而不是如何使用 ValidationMessageFor
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 2014-07-21
        • 1970-01-01
        相关资源
        最近更新 更多