我试图在由MVC执行的AJAX流程的后处理之后更改页面。我以不同的方式使用它,也许我的用法可能是错误的。
C#MVC代码部分。我正在发送int列表,它是用户列表和进程并执行某些操作。
[HttpPost]
public ActionResult SelectUserPost(int[] usersListArray)
{
// lots of code but omitted
return JavaScript("window.location = '" + Url.Action("Index", "Courses") + "'"); // this does not work
return RedirectToAction("Index"); // this also does not
return RedirectToAction("Index","Courses"); // this also does not
}
我的问题是MVC进程结束后重定向部分不起作用。流程有效,只有重定向无效。
此处的JavaScript代码
// Handle form submission event
$('#mySubmit').on('click',
function(e) {
var array = [];
var rows = table.rows('.selected').data();
for (var i = 0; i < rows.length; i++) {
array.push(rows[i].DT_RowId);
}
// if array is empty, error pop box warns user
if (array.length === 0) {
alert("Please select some student first.");
} else {
var courseId = $('#userTable').find('tbody').attr('id');
// push the id of course inside the array and use it
array.push(courseId);
$.ajax({
url: "/Courses/SelectUserPost",
type: "POST",
data: JSON.stringify(array),
dataType: "json",
contentType: 'application/json; charset=utf-8'
});
}
});
已将此添加到AJAX中,但也无法正常工作
success: function() {
window.location.href = "@Url.Content("~/Courses/Index")";
}
答案 0 :(得分:4)
一旦使用AJAX,浏览器就不会意识到响应。
当前格式的AJAX success
失败,因为重定向响应代码的状态不是2xx
,而是3xx
您需要检查实际响应并根据重定向响应中发送的位置手动执行重定向。
//...
success: function(response) {
if (response.redirect) {
window.location.href = response.redirect;
} else {
//...
}
}
//...
为需要尽快工作的人服务:
控制器部分:
return RedirectToAction("Index","Courses");
HTML部分:
$.ajax({
url: "/Courses/SelectUserPost",
type: "POST",
data: JSON.stringify(array),
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert("Successful!");
window.location.href = "@Url.Content("~/Courses/Index")";
}
});
刚刚删除
dataType:“ json”
部分原因是因为我使用自己的数据类型而不是JSON。