2011-09-21 3 views
1

내 페이지에 Ajax.BeginForm을 사용하고 있습니다. 클라이언트 측 유효성 검사는 작업을 수행하고 유효성 검사 요약 영역에 오류를 표시합니다. 이제 컨트롤러에서 서버 측 오류가 발생할 때 동일한 동작이 필요합니다.ajax.beginform을 사용하여 MVC3에서 서버 측 오류를 처리하는 방법

표준 양식에서는 ModelState에 AddModelError를 사용하고 양식으로 돌아 가면 필드와 유효성 검사 요약이 업데이트됩니다. 하지만 Ajax를 사용하면이 작업을 수행 할 수 없습니다.

내 컨트롤러가 JsonResult를 반환합니다. (올바른 방법은 아니지만 쉽게 업데이트 정보를 양식으로 다시 가져올 수 있습니다.) 가장 먼저 할 일은 ModelState.IsValid를 확인하는 것입니다. 이것이 틀린 경우, 검증 요약의 페이지에 오류가 표시되도록하려면 어떻게해야합니까?

나는 필드 이름과 오류로 사전 모음을 반환하고 거의 바로 jQuery를에서 촬영이 루틴, 전화 :

function ShowFormErrors(validator, errors) 
{ 
if(errors) { 
    // add items to error list and map 
    $.extend(validator.errorMap, errors); 
    validator.errorList = []; 
    var curElement; 
    for (var name in errors) { 
     for(var elm=0; elm<validator.currentElements.length; elm++) 
     { 
      if(validator.currentElements[elm].name == name) 
      { 
       curElement = validator.currentElements[elm]; 
       break; 
      } 
     } 

     validator.errorList.push({ 
      message: errors[name], 
      element: curElement   //this.findByName(name)[0] 
     }); 
    } 
    // remove items from success list 
    validator.successList = $.grep(validator.successList, function(element) { 
     return !(element.name in errors); 
    }); 
} 
validator.settings.showErrors 
    ? validator.settings.showErrors.call(validator, validator.errorMap, validator.errorList) 
    : validator.defaultShowErrors(); 

}

이 코드는 작동하지만 유효성 검사기를 호출하지 않습니다. showErrors는 validate.unobtrusive.js에 있다고 생각하지 않기 때문에 settings.showErrors가 아니라 validate.js에 있습니다.

function ShowValiationSummaryErrors(validator) 
{ 
    var frm = validator.currentForm; 
    var container = $(frm).find("[data-valmsg-summary=true]"), list = container.find("ul"); 

    if (list && validator.errorList.length) { 
     list.empty(); 
     container.addClass("validation-summary-errors").removeClass("validation-summary-valid"); 

     $.each(validator.errorList, function() { 
     $(list).append($("<li />").html(this.message)); 
     }); 
    } 
} 


function ClearValidationSummary() 
{ 
var container = $('form').find('[data-valmsg-summary="true"]'); 
var list = container.find('ul'); 

    if (list && list.length) 
    { 
    list.empty(); 
     container.addClass('validation-summary-valid').removeClass('validation-summary-errors'); 
    } 
} 

답변

0

무엇 간단 할 것이다 것은 당신의 컨트롤러 액션이 새로운 내용을 주입하여 DOM을 양식을 포함하는 부분보기를 반환하고 업데이트하는 것입니다 :

나는 설정하고 로컬 검증 요약을 삭제 끝났다. 이렇게하면 오류가 자동으로 표시됩니다. JSON을 반환하면이 정보를 JSON 문자열에 포함시킨 다음 관련 부분을 수동으로 업데이트하여 오류를 표시해야합니다.

+0

좋아, 어떻게 되니? 나는 클라이언트 측에 나타나는 이름과 메시지로 사전 컬렉션을 반환하고 있습니다. 그런 다음 validators.errorlist 및 successlist 컬렉션을 업데이트하고 defaultShowErrors()를 호출합니다. 이 필드를 hilights 및 필드 오류 메시지를 표시하지만 유효성 검사 요약에 오류를 넣지 않습니다. 이 코드로 원본 게시물을 업데이트합니다. –

관련 문제