Ajax начинает заполнять форму с данными о сбоях - PullRequest
0 голосов
/ 12 июня 2018

На моей странице есть следующий помощник Ajax.

@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess(data)", OnFailure = "AccountActivateFailure(data)" }, new { id = "searchForm" }))

И следующие функции JS.

function AccountActivateSuccess(data) {
        console.log('account activate success');
        console.log(data);    
        //do stuff with information in data
    }

    function AccountActivateFailure(data) {
        console.log('account activate failure');
        console.log(data);
       //do stuff with information in data
    }

Контроллер реагирует так:

[HttpPost]
public ActionResult Activate(MyModel model)
{
    try
    {
        //something spectacular
         return Json(new {success = true});
    }
    catch (Exception e)
    {
        return Json(new {success = false, message = e});
    }
}

Когда не генерируется ошибка, заполняется переменная 'data', я даже могу добавить свойство сообщения и получить указатель на него в ответе.

Однако, когда выдается исключение, я получаюследующая ошибка консоли:

VM34: 3 Uncaught ReferenceError: данные не определены

Они даже не попадают в файл console.log.

Что дает?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Проблема была в том, что мне нужно было сделать e.ToString(); с моего контроллера.Что также сбивало с толку, так это то, что я ожидал выполнения функции AccountActivateFailure, но, хотя и было исключение, оно было в Try Catch, поэтому оно переходило в функцию AccountActivateSuccess, и я не устанавливалздесь сообщение об ошибке.

Это внутреннее приложение, поэтому нет проблем с отображением информации о сервере на странице.Пользователь должен точно знать, что пошло не так, вот в чем смысл этой системы.

0 голосов
/ 12 июня 2018

Удалите параметр «(data)» для обратных вызовов в определении формы:

@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess", OnFailure = "AccountActivateFailure" }, new { id = "searchForm" }))

А также убедитесь, что область действия функций JavaScript обратного вызова является глобальной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...