从视图AJAX Post后,ASP.NET MVC RedirectToAction不起作用

问题描述 投票:3回答:2

我正在尝试从控制器重新加载我的视图,以便在对我的控制器进行AJAX POST调用后显示存储在TempData中的数据。问题是我对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调用之后,它(AJAX)可能是问题的根源吗?

javascript jquery asp.net ajax asp.net-mvc
2个回答
4
投票

所以你想在发布后重定向你的页面。

将您的返回方法更改为Json。

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

和OnSuccess Ajax

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

而已。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.