2012-09-06 4 views
5

enter image description hereMVC 3 유효성 검증 검증

내가 MVC 3 유효성 검사를 사용하고 실패한 컨트롤에 해당하는 내 라벨이 빨간색으로 바뀔 때까지합니다. 내 제품 관리자는 오류가있는 각 컨트롤의 레이블이 빨간색으로 바뀌길 원합니다.

그래서 '학생 이름'레이블이 빨간색으로 바뀌어야합니다. '이메일 주소'라벨이 빨간색으로 바뀌어야합니다.

나는 사업부에 각 오류 MSG 포장과 JS 파일에 각 사업부

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

의 길이를 확인하려고 :

$(document).ready(function() { 

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

    } 

을하지만 더 성공이 없습니다. 유효성 검사는 완전히 새로 고치지 않고 수행되므로 유효성 검사가 실행될 때 my $ (document) .ready가 실행되지 않습니다. 정말 JS의 왕이 아니에요

클라이언트 측 유효성 검사가

을 활성화

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

편집, 그러나 이것은 잘 (작동하는 것 같다 :

+0

보기 코드의 일부를 표시 할 수 있습니까? 라벨에 LabelFor ..., 입력에 EditorFor를 사용하고 있습니까? –

+0

예 라파엘, 그것의 일반적인 구현

@Html.LabelFor(m => m.studentFirstName)
나는 각각 사용하는 희망으로 채워 경우 내가 그에게 조건으로 확인할 수 있도록 최선을 다하고라는 이름 사업부의 각 ValidationMessageFor 배치 형태 –

+0

위의 div의 그룹화 유효성 검사

@Html.TextBoxFor(m => m.studentFirstName, new { style = @controlWidth })
labelfor를 잡고있는 div의 CSS를 변경하십시오. –

답변

4

클라이언트 측 유효성 검사가 비활성화 간단한 경우)

$('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

클라이언트 측 유효성 검사가 사용 가능합니다. 하지만 내 요구 사항은 관련 컨트롤 레이블을 빨간색으로 만드는 것입니다. 유효성 검사 메시지가 나타나면 (예 : 업로드 한 img) –

+0

@Dave yes, 내 발언은 바보 같았습니다. 나는 아직도 무언가를 찾고있다;) –

+0

결코 어리 석다. 이 문제는 복잡합니다. 얼마나 어려운지 놀랍습니다. 정말 $(). ready()에서 오류 메시지를 확인할 수 있다고 생각했습니다. 그러나 유효성 검사가 서버를 치지 않고 모든 클라이언트 측으로 보이기 때문에 새로 고침이 발생하지 않고 새로운 $ ready() 이벤트도 발생하지 않습니다. –

0

아래는 제출 단추를 클릭 할 때 오류 클래스를 추가하거나 제거하여 포함 div 태그의 색을 지정하는 JQuery 함수입니다. 레이블을 쉽게 추가하여 클래스를 레이블에 추가 할 수 있습니다.

$('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/ –