2011-01-12 130 views
1

我在ASP.NET MVC 2表单验证和设置我的样式时遇到了问题。ASP.NET MVC 2验证错误样式

这里是我的形式的一个例子,有一个验证错误:

alt text

的字段使用下面的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>  

注册场错误的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辅助,以决定是否应该使用注册场错误类:

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

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

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

回答

2

首先换你的div元素没有任何条件逻辑,但与类名“错误”跨度包装你的验证消息象下面这样:

<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); 
}); 
}); 

这会改变你的代码的更少的部分。

+0

谢谢,这很好。我认为上面有一个错字,用if($(this).html()。length <1)。我认为它应该是长度> 1? – mfanto 2011-01-12 23:01:35