如何使MVC控制器从ajax调用重定向用户?

时间:2014-03-03 19:35:31

标签: ajax asp.net-mvc asp.net-mvc-4

我发送一个数组作为对MVC控制器的ajax调用的“数据”值(参数)。然后,控制器应该将用户重定向到新页面,但事实并非如此。相反,我可以在预览窗口中看到正在返回View但是通过ajax返回。我不确定我接近这个的方式是否正确,因为我似乎很难找到好的例子。我想避免使用Html.ActionLink,因为我将有大约20个参数传递给控制器​​。

以下是将数组发送到控制器的函数:

submit: function () {
        var data = {
            "ReqDepartment": (viewModel.reqDepartment === null) ? null : viewModel.reqDepartment,
            "EquipmentGroup": (viewModel.equipmentGroup === null) ? null : viewModel.equipmentGroup,
            "SiteCode": (viewModel.site === null) ? null : viewModel.site.SiteCode,
            }; //header
      $.ajax({
                type: "POST",
                url: "/ArctecLogisticsWebApp/Requisitions/ReqsSummary/",
                data: data,
                traditional: true
       });
     }

这是控制器,ReqSearchCriteria是ViewModel:

public ViewResult ReqsSummary(ReqSearchCriteria criteria)
    {
return View("ReqsSummary", requisitionsRepository.GetReqsAdvancedSearch(criteria));
    }

控制器正在ajax调用中返回View。我应该使用不同的方法将数组发送到控制器吗?

2 个答案:

答案 0 :(得分:1)

ajax调用不会自行重定向。您需要做的是将json从控制器返回到具有操作结果的视图,如果操作成功则重定向

$.ajax({
    type: "POST",
    url: "/ArctecLogisticsWebApp/Requisitions/ReqsSummary/",
    data: data,
    traditional: true,
    success: function(result){
        if(result.Success){
            window.location = '@Url.Action('Action', 'Contorller')';
        }
    }
});

编辑:

您拥有的控制器方法将起作用。它应该与您重定向的表单不同,以消除混淆。通过数据,您可以传递您需要的任何信息。

data: { id: $('.id').val() },  

这样的东西会传递带有类id的字段中的任何值。然后在您的控制器上为视图创建模型并返回视图。我到处都使用ajax调用,它们非常有用。如果您有任何其他问题,请告诉我。

答案 1 :(得分:1)

您没有拥有来检查您的success / done处理程序中的结果,然后手动执行重定向。您实际上可以从控制器返回JavascriptResult,它将为您重定向:

$.ajax({
    type: 'post',
    url: '/Home/DoStuff'
});

[HttpPost]
public ActionResult DoStuff()
{
    return JavaScript(string.Format("window.location='{0}';", Url.Action("About")));
}

如果你想获得幻想,你甚至可以创建一个新的ActionResult类型来处理你的格式。或者您可以检测它是否是AjaxRequest并确定您是否应该执行RedirectToAction或JavaScript结果。