2012-09-06 45 views
5

enter image description hereMVC 3驗證:希望把我的紅色標籤對應的控件驗證失敗

我使用MVC 3的驗證。我的產品經理希望每個出錯控件的標籤都變成紅色。

所以'學生名字'標籤應該變成紅色。 '電子郵件地址'標籤應該變成紅色。

我試圖包裝每個錯誤味精在一個div和檢查每個格

<div id="divValStudentFirstName">@Html.ValidationMessageFor(m => m.studentFirstName)</div> 

的長度在一個js文件:

$(document).ready(function() { 

    if ($("#divValStudentFirstName").length > 1) { 
       ("#divStudentFirstName").css("color", "red"); 

    } 

但我沒有成功。驗證檢查在沒有完全刷新的情況下完成,因此,當驗證命中時,我的$(document).ready未被觸發。

+0

您能否顯示您的視圖的部分代碼?您是使用LabelFor ...作爲標籤,EditorFor作爲輸入還是? –

+0

是拉斐爾,其典型的實現

@Html.LabelFor(m => m.studentFirstName)
@Html.TextBoxFor(m => m.studentFirstName, new { style = @controlWidth })
與形式 –

+0

我放置在每個ValidationMessageFor在專用名爲div的,所以我可以檢查是否每個被填充希望使用它作爲一個條件以上的div分組驗證更改持有標籤的div的css爲 –

回答

4

客戶端驗證禁用:

public static IHtmlString ValidationLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText = null) { 
      var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); 
      var name = ExpressionHelper.GetExpressionText(expression); 
      string resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? name.Split('.').Last(); 
      if (String.IsNullOrEmpty(resolvedLabelText)) { 
       return MvcHtmlString.Empty; 
      } 

      var tag = new TagBuilder("label"); 
      tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name))); 
      tag.GenerateId(name); 
      tag.SetInnerText(resolvedLabelText); 
      ModelState modelState; 
      string fullName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); 
      if (html.ViewData.ModelState.TryGetValue(fullName, out modelState)) { 
       if (modelState.Errors.Count > 0) { 
        tag.Attributes.Add("style", "color:red"); 
       } 
      } 
      return new MvcHtmlString(tag.ToString()); 
     } 

編輯

客戶端驗證啓用

我真的不是在JS王,但這似乎工作(以及在至少簡單的情況)

$('form').submit(function() { 
     var form = $(this); 
     $('label').removeClass('field-validation-error'); 
     if (!form.valid()) { 
      $('.input-validation-error') 
       .each(function() { 
        $("label[for='" + $(this).attr("id") + "']").addClass('field-validation-error'); 
       }); 
     } 
    }); 
+0

客戶端驗證已啓用。但我的要求是也要使相關控件的標籤變爲紅色。我想在驗證消息出現後添加一個css屬性(就像我上傳的img) –

+0

@Dave是的,我的評論很愚蠢。我仍然在尋找東西;) –

+0

從來沒有愚蠢。這個問題很複雜。我很驚訝有多難。我真的認爲我可以檢查$()。ready()中的錯誤消息。但是由於驗證似乎是所有客戶端沒有觸及服務器,所以不會刷新並且沒有新的$ ready()事件。 –

0

下面是一個JQuery函數,當點擊提交按鈕時,通過添加(或刪除)一個錯誤類來爲包含的div標籤着色。它可以很容易地更改爲將類添加到標籤。

$('form').submit(function() { 

    if ($(this).valid()) { 
     $(this).find('div.form-group').each(function() { 
      if ($(this).find('span.field-validation-error').length == 0) { 
       $(this).removeClass('error-colored'); 
      } 
     }); 
    } 
    else { 
     $(this).find('div.form-group').each(function() { 
      if ($(this).find('span.field-validation-error').length > 0) { 
       $(this).addClass('error-colored'); 
      } 
     }); 
    } 
}); 
+0

該解決方案基於以下教程,用於向MVC驗證添加引導錯誤突出顯示。它還解決了服務器端驗證錯誤。 http://www.braindonor.net/blog/integrating-bootstrap-error-styling-with-mvcs-unobtrusive-error-validation/381/ –