我发送一个数组作为对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。我应该使用不同的方法将数组发送到控制器吗?
答案 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结果。