Ajax.BeginForm возвращает Json для сообщения

Я использую jquery ненавязчивый ajax и MVC Ajax.Beginform() для проверки формы через серверную часть С#. Я всегда заменяю форму самой собой.

Все работает нормально, но меня интересует:

Допустим, моя форма запускает действие «сохранить в базу данных», и это действие выполнено успешно. В форме нет ошибок, поэтому я не хочу отправлять форму обратно клиенту, а скорее сообщение JSON, которое запускает диалоговое окно успеха на внешнем интерфейсе. Проблема в том, что замена формы происходит всегда. Как я могу заставить его не заменять мою форму, когда я получаю json с сервера?

Я думаю, что я спрашиваю: как я могу НЕ обновлять div, а вместо этого просто выполнять какой-то другой код?

Я знаю о onSuccess, но он срабатывает после замены DIV, я хочу пропустить замену.


person PoeHaH    schedule 05.12.2014    source источник
comment
Могу, если очень нужно, но все работает. У меня не проблема, а просто вопрос :-)   -  person PoeHaH    schedule 05.12.2014


Ответы (2)


Вы должны использовать jQuery ajax для публикации формы вместо Ajax.Beginform для такой функциональности. Суть Ajax.BeginForm заключается в публикации формы и обновлении заданной цели. Если вы хотите вернуть либо частичное представление, либо объект JSON, вы должны выполнить замену страницы и запуск диалогового окна успеха с помощью jQuery.

person Kim    schedule 05.12.2014

Возможно, вам придется реализовать пользовательскую функцию замены

  • Сторона сервера:

1) Создайте модель ответа, которая будет содержать статус вашего ответа с соответствующим сообщением.

public class ReposnseModel
{
    public bool isSuccess {get; set;}
    public string SuccessMessage {get;set;}
    public string ErrorMessage {get;set;}
}

2) Ваша форма должна отображаться через частичное представление, чтобы вы могли вернуть только ее содержимое.

public ActionResult DoWork(Model model)
{

//if success:
...
return Json(new ReposnseModel{isSuccess = true, SuccessMessage = "Success"});

//if lets say model is not valid or some other error:
return PartialView("YourPartialViewForm",model)

}
  • Сторона клиента

Зарегистрируйте обратный вызов Ajax.BeginForm onSuccess примерно так:

  function Callback(data) {
    if (data != null) {
        if (data.isSuccess != undefined) { //means that the data is a serialized ReposnseModel and not a form content
            if (data.isSuccess) {                
                alert(data.SuccessMessage);               
            }else
            {              
                alert(data.ErrorMessage);
            }
        }
        else { //otherwise data is a form content, so it needs to replace the current content  
            $('#formContainer').html(data);
        }
     }
  }
person Alex Art.    schedule 05.12.2014