2013-04-12 1 views
1

У меня есть метод действий типов «JsonResult». Я называю это с помощью сообщения ajax. Я хочу вернуть пользовательские ошибки из метода действий обратно в пост ajax и отобразить эти ошибки в качестве сводки валидации.Возвратите пользовательские ошибки в функцию ошибки сообщения ajax из метода JsonResult и отобразите его в разделе Сводка валидации

[HttpPost] 
public JsonResult RegisterUser(RegistrationModel model) 
{ 
    //if username already exists return custom error to be displayed on view  
    //under validation summary 
    // control should go back to error function with message to be displayed. 
} 


    $.ajax({ 
     url: url, 
     type: 'POST', 
     dataType: 'json', 
     data: ko.toJSON(model), 
     contentType: "application/json; charset=utf-8", 
     success: function (result) { 
      success(result) 
     }, 
     error: function (req, status, error) { 
      error(req, status, error); 
     } 
    }); 

    function success(result) { 
    //Do Something 
    } 

    function error(req, status, error) { 
     //Display error messages under validation summary. 
    } 

ответ

4

Из моего понимания, когда вы делаете AJAX пост, он не заботится, если модель проверка прошла или нет, он заботится только если он получил ответ от сервера. Если исключение выбрасывается с сервера, то оно ударит вашу функцию ошибки ajax.

Так что я бы сделал, это вернуть объект json, который позволяет мне узнать статус проверки.

if(!ModelState.IsValid){ 
     var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors); 
     var message = "Please fix the following: " + Environment.NewLine; 

     foreach (var modelStateError in modelStateErrors) 
     { 
      message += modelStateError.ErrorMessage + Environment.NewLine; 
     } 

    return Json(new {success = false, response = message}) 
} 


// Do other logic 

return Json(new {success = true, response = "Successful message"}) 

После того, как вы пройдете этот объект обратно, вы можете сделать следующее Javascript

success: function (result) { 
      if(result.success === true){ 
       $('#status-div').empty().html('<div class="success">' + result.response + '</div>'); 
      } 
      if(result.success === false){ 
       $('#status-div').empty().html('<div class="fail">' + result.response + '</div>'); 
      } 

     } 
Смежные вопросы