2011-01-12 132 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