【问题标题】:ASP.NET MVC 2 Validation Error StylesASP.NET MVC 2 验证错误样式
【发布时间】:2011-06-08 03:17:02
【问题描述】:

我在进行 ASP.NET MVC 2 表单验证和设置样式时遇到问题。

这是我的表单示例,有一个验证错误:

该字段使用以下html:

<div class="registration-field">
     <label>FullName</label><%= Html.TextBoxFor(x => x.FullName) %>
     <%= Html.ValidationMessageFor(x => x.FullName)%>
</div>    

问题是,为了在整个元素中显示高亮,我需要将 CSS 类“registration-field-error”添加到第一个 div。

<div class="registration-field registration-field-error">
     <label>FullName</label><%= Html.TextBoxFor(x => x.FullName) %>
     <%= Html.ValidationMessageFor(x => x.FullName)%>
</div>    

registration-field-error 的 CSS 是:

.registration-field-error
{
    background-image:url(../Content/Images/box-background-error.png);
    background-repeat:repeat-y; 
}

我可以做一些复杂的逻辑来检查 ViewState 是否有错误,这对于服务器验证错误很好,但不适用于客户端验证:

<% if (ViewData.ModelState["FullName"] == null) { %>
     <div class="registration-field">
<% }  else { %>
     <div class="registration-field registration-field-error">
<% } %>

我的第一个想法是创建一个新的 Html 助手来决定它是否应该使用registration-field-error 类:

<%= Html.FormFieldFor(x => x.FullName, ViewData.ModelState) %> 

然后编辑 MicrosoftMvc.Ajax.js 脚本以在检测到客户端验证错误时添加该类。

或者,有没有更好的方法来实现这一点?

【问题讨论】:

    标签: jquery asp.net-mvc ajax model-view-controller


    【解决方案1】:

    首先在没有任何条件逻辑的情况下包装您的 div 元素,但将您的验证消息包装在具有类名“error”的 span 中,如下所示:

    <div class="registration-field">      
      <label>FullName</label><%= Html.TextBoxFor(x => x.FullName) %>      
        <span class="error"><%= Html.ValidationMessageFor(x => x.FullName)%></span>
    </div> 
    

    然后使用下面给出的函数来动态添加错误类:

    $(function(){
     $("div span.error").each(function(){
      var className = $(this).parent().attr("class") + "-error";
      if($(this).html().length > 1)
       $(this).parent().addClass(className);
     });
    });
    

    这将更改您的代码的更少部分。

    【讨论】:

    • 谢谢,效果很好。我认为上面有一个错字,if ($(this).html().length 1?
    • 好收获。更新了帖子。
    • 如果您使用客户端验证,您应该更新它。必须很容易 - 可能,最简单的方法是每 X 毫秒执行几乎相同的代码 + 当验证错误类从子 div / span 中删除时,添加删除 registration-field-error 类的代码。
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多