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