2009-12-21 7 views
0

자,보기에는 기본보기 모델에 모두 연결된 4 개의 부분 뷰 (각각 별도의 뷰 모델이 있음)가 있다고 가정 해 보겠습니다. 제출을 클릭하면 모든 데이터가 게시됩니다. 일부 서버 측 유효성 검사를 실행하면 4 개의 부분 중 3 개에서 필드에 유효성 검사 오류가 발생한다는 것을 알 수 있습니다. 따라서 유효성 검증 오류는 다시 게시하고 부분은 속해있는 부분 이상으로 게시하려고합니다.ASP.NET MVC 사용자 메시징 구현

구현 생각은 무엇입니까?

답변

2

재미있는 시나리오. 귀하를 정확하게 이해하는 경우 : 복잡한 양식 게시물의 유효성을 검사하고 유효하지 않은 경우 해당 양식을 해당보기로 돌아가서 해당 양식 영역 위에 오류 메시지를 표시하십시오. < % = Html.ValidationSummary() %>를 사용할 수없는 이유는 유효한 내용과 그렇지 않은 내용에 따라 양식의 여러 영역에 대해 서로 다른 요약이 필요하다는 것입니다.

소금 한 알갱이로 가져 가라. 그러나 내가 할 수있는 것은 각 양식 영역이나 부분에 대해 사용자 정의 HtmlHelper를 작성하는 것이다. 사용자 정의 코드를 Html.ValidationSummary의 현재 구현에 기반하여 코드 here을 찾을 수 있습니다. 각 사용자 정의 유효성 검사 요약에서 ModelState의 특정 오류를 찾아 표시 할 수 있습니다. 나는 많은 시간이 없어 시험하지 않았다 그러나 이것은 당신이 시작 나타날 수 있습니다

public static class CustomValidationExtensions 
{ 
    public static string CustomValidationSummary(this HtmlHelper htmlHelper) 
    { 
     if (!htmlHelper.ViewData.ModelState.ContainsKey("YourFormName")) 
      return null; 

     ModelState modelState = htmlHelper.ViewData.ModelState["YourFormName"]; 
     ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors; 
     ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0]; 

     if (modelError == null) 
      return null; 

     TagBuilder builder = new TagBuilder("span"); 
     builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName); 
     builder.SetInnerText(modelError.ErrorMessage); 

     return builder.ToString(TagRenderMode.Normal); 
    } 
} 

이 만 검사 한 ModelState 요소와 일부 HTML을 표시합니다. 모든 ModelState 요소를 손으로 추가하거나 컬렉션을 반복하면서 해당 부분 뷰에 적용되는 오류 메시지 만 표시하려고 할 것입니다. 가장 좋은 방법은 일반적인 방법으로 ModelState에 오류를 추가하고 ModelState를 직접 사용하여 해당 부분에 적용되는 오류 만 표시하는 것입니다. 물론 html을 조작하고 출력을 통해 원하는 모든 작업을 수행 할 수 있습니다.