我正在使用MVC3。我在做一个jquery帖子后试图redirectToAction。
编辑:抱歉没有具体。每当它到达返回RedirectToAction时,它只刷新同一页面并返回到相同的当前视图。
我的查看代码如下:
$("button[name='command']").click(function () {
var checked_status = null;
if ($("#select_all").is(':checked')) {
checked_status = true;
} else {
checked_status = false;
}
$.post('@Url.Action("SaveInvitations", "Contractors")',
{
command: $(this).val(),
selectedContractors: $("input[name='selectedContractors']:checked").map(function () { return $(this).val(); }).get().join(","),
page: $(".selected").text(),
CheckedAll: checked_status
});
});
我的控制器有以下内容:
if (command == "skip")
{
TempData["message"] = string.Format("No contractors where selected");
RedirectToAction("Index", "Home");
}
else
{
...
TempData["message"] = string.Format("The invitations have been send successfully.");
Session["subModel"] = null;
return RedirectToAction("Index", "Home");
}
然后,我再次尝试在jquery $ .post之后执行redirectToAction。我需要做些什么来使其发挥作用?
答案 0 :(得分:7)
RedirectToAction是服务器端方法。由于你正在做一个jQuery帖子,你可能需要在你的帖子完成后这样做。
$.post('@Url.Action("SaveInvitations", "Contractors")',
{
command: $(this).val(),
selectedContractors: $("input[name='selectedContractors']:checked").map(function () { return $(this).val(); }).get().join(","),
page: $(".selected").text(),
CheckedAll: checked_status
},function(){
window.location.href='@Url.Action("Index", "Home")';
});
这是另一种编写上述方法的方法,使用对done
的显式调用使其更具可读性。
var url='@Url.Action("SaveInvitations", "Contractors")';
var data = {
command: $(this).val(),
selectedContractors: $("input[name='selectedContractors']:checked")
.map(function () { return $(this).val(); }).get().join(","),
page: $(".selected").text(),
CheckedAll: checked_status
};
$.post(url,data)
.done(function(){
window.location.href='@Url.Action("Index", "Home")';
});
如果你在jQuery ajax操作后进行重定向,为什么不直接调用Action方法(正常表单发布)然后从那里重定向?人们通常使用jQuery ajax操作来进行部分页面更新。你确定要这样做吗?