ASP.NET MVC RedirectToAction 在从视图中发布 AJAX 后不起作用

Posted

技术标签:

【中文标题】ASP.NET MVC RedirectToAction 在从视图中发布 AJAX 后不起作用【英文标题】:ASP.NET MVC RedirectToAction doesn't work after AJAX Post from view 【发布时间】:2018-06-02 20:34:57 【问题描述】:

我正在尝试从控制器重新加载我的视图,以便在对我的控制器进行 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() 应该返回我的视图,但没有任何反应。

我尝试将 RedirectToAction 替换为 View, Redirect...没有更好的事情发生。我试图从我的 AJAX 成功回调函数重新加载,但行为不是我所期望的,我更喜欢从我的 Controller 中执行此操作。

我已经在我的应用程序中做了同样的事情(一个 RedirectToAction 调用来重新加载我的页面并显示 TempData 存储的数据),但是在表单 POST 提交而不是 AJAX 调用之后,它 (AJAX) 是否会成为问题的根源?

【问题讨论】:

ajax 的全部意义在于保持在 same 页面上。 Ajax 调用从不重定向。如果要重定向,请不要使用 ajax。 【参考方案1】:

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

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

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

OnSuccess Ajax

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

就是这样。

【讨论】:

在 window.location.href 的帮助下重定向到特定视图后,是否可以在 AJAX 成功中调用基本控制器方法?【参考方案2】:

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

【讨论】:

在 window.location.href 的帮助下重定向到特定视图后,是否可以在 AJAX 成功中调用基本控制器方法?

以上是关于ASP.NET MVC RedirectToAction 在从视图中发布 AJAX 后不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net mvc和asp.net有啥区别?

七天学会ASP.NET MVC ——ASP.NET MVC 数据传递

ASP.NET MVC

ASP.NET MVC 5、ASP.NET Core MVC 5 有啥区别?

ASP.NET MVC 和 Angularjs 与 ASP.NET MVC 和 Reactjs

七天学会ASP.NET MVC ——ASP.Net MVC 数据处理