ASP.NET MVC RedirectToAction在视图中进行AJAX提交后无法正常工作

16
我试图从控制器重新加载视图,以显示存储在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(),应该返回我的视图,但没有任何反应。
我试图用View、Redirect等替换RedirectToAction,但没有任何改善。我尝试从我的AJAX成功回调函数重新加载,但行为不符合我的预期,并且我更喜欢从我的控制器中实现。
我已经在我的应用程序中做了相同的事情(使用RedirectToAction调用重新加载我的页面并显示TempData存储的数据),但是在提交表单POST而不是AJAX调用后进行的,这是否可能是问题的来源?

1
Ajax 的整个意义在于停留在同一个页面上。Ajax 调用永远不会重定向。如果你想要重定向,请不要使用 Ajax。 - user3559349
这并不是那么简单。使用AJAX的一个相当普遍的情况是,您希望某些情况(例如错误和更新)保留在同一页上,但在完全成功时,您希望重定向到下一页。 - Auspex
2个回答

30

所以你想在提交后重定向你的页面。

将返回方法更改为Json。

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

并且在Ajax成功后

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

就这样。


在使用window.location.href重定向到特定视图后,是否可能在AJAX成功之后调用基础控制器方法? - Jimesh
我花了很长时间才明白我试图从一个Ajax调用中进行重定向。谢谢! - Romias

0
在Ajax调用中,使用“window.location = redirectUrl”在成功方法中重定向到特定页面,而不是回调函数。

在使用window.location.href重定向到特定视图后,是否可以在AJAX成功时调用基本控制器方法? - Jimesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接