ASP.NET MVC RedirectToAction не работает после публикации AJAX из представления

Я пытаюсь перезагрузить свое представление с контроллера, чтобы отобразить данные, хранящиеся в TempData, после вызова AJAX POST для моего контроллера. Проблема в том, что мой вызов метода RedirectToAction ничего не перенаправляет.

Вот несколько примеров кода

Вид:

    $('#incidentTableBody').on('click', 'button.relayBack', function () {
            Post('/Incident/RelayBack', { incidentId: $(this).parent().parent().data('id'), ownerId: $(this).parent().parent().data('ownerid') }, function () {  });
        });

    function Post(action, data, callback) {
            $.ajax({
                url: action,
                type: "POST",
                data: data,
                //error: function (jqXHR, textStatus, errorThrown) {
                //    console.log(errorThrown);
                //},
                success: callback,
                cache: false
            });
        }

Контроллер:

    [Authorize]
    public ActionResult IncidentList()
    {
        ViewBag.Title = "IncidentList";
        return View();
    }

    [HttpPost]
    [Authorize]
    public ActionResult RelayBack(string incidentId, string ownerId)
    {
        bool success;
        try
        {
            new Guid(_incidentService.RelayBack(new Guid(incidentId), new Guid(ownerId)));
            success = true;
        }
        catch
        {
            success = false;
        }

        if (success)
        {
            TempData["Message"] = "Le ticket a bien été relancé par l'équipe support";
            TempData["Class"] = "alert-success";
        }
        else
        {
            TempData["Message"] = "Une erreur est survenue lors de la relance de l'incident";
            TempData["Class"] = "alert-warning";
        }

        return RedirectToAction("IncidentList"); // TODO : redirect doesn't work
    }

Мой вызов AJAX работает и вызывает мой контроллер, затем все мои инструкции метода контроллера, кроме последнего (перенаправление), выполняются правильно. Последний, RedirectToAction, фактически вызывает IncidentList (), который должен вернуть мое представление, но ничего не происходит.

Пытался заменить RedirectToAction на View, Redirect ... ничего лучше не вышло. Я попытался перезагрузить свою функцию обратного вызова AJAX, но поведение оказалось не таким, как я ожидал, и я предпочитаю делать это с помощью своего контроллера.

Я уже сделал то же самое (вызов RedirectToAction для перезагрузки моей страницы и отображения сохраненных данных TempData) в моем приложении, но после отправки формы POST, а не вызова AJAX, может ли он (AJAX) быть источником проблемы?


person Alex    schedule 20.12.2017    source источник
comment
Весь смысл ajax в том, чтобы оставаться на той же странице. Вызовы Ajax никогда не перенаправляются. Если вы хотите перенаправить, НЕ используйте ajax.   -  person    schedule 20.12.2017


Ответы (2)


поэтому вы хотите перенаправить свою страницу после публикации.

измените метод возврата на Json.

return Json(new { redirectToUrl = Url.Action("action", "contoller") });

И OnSuccess Ajax

success: function (response) {
                window.location.href = response.redirectToUrl;
            }

Вот и все.

person Tonmoy Saha    schedule 20.12.2017
comment
Можно ли вызвать метод базового контроллера в случае успеха AJAX после перенаправления с помощью window.location.href на конкретное представление? - person Jimesh; 09.11.2020

В вызове Ajax используйте "window.location = redirectUrl" для перенаправления на определенную страницу в методе успеха вместо обратного вызова.

person Mittal Patel    schedule 20.12.2017
comment
Можно ли вызвать метод базового контроллера в случае успеха AJAX после перенаправления с помощью window.location.href на конкретное представление? - person Jimesh; 09.11.2020