MVC RedirectToAction在JSON后的返回中不起作用
MVC RedirectToAction在JSON后的返回中不起作用
我试图在MVC执行的AJAX过程的后处理中更改页面。我可能使用了不同的方法,可能我的用法是错误的。\nC# MVC代码部分。我发送了一个用户列表的int数组,然后进行处理和操作。\n我的问题是,在MVC处理结束后,重定向部分不起作用。处理是有效的,只有重定向不起作用。\nJavaScript代码如下:\n// 处理表单提交事件\n$(\'#mySubmit\').on(\'click\', function(e) {\n var array = [];\n var rows = table.rows(\'.selected\').data();\n for (var i = 0; i < rows.length; i++) {\n array.push(rows[i].DT_RowId);\n }\n // 如果数组为空,则弹出错误提示框提醒用户\n if (array.length === 0) {\n alert(\"请先选择一些学生。\");\n } else {\n var courseId = $(\'#userTable\').find(\'tbody\').attr(\'id\');\n // 将课程ID添加到数组中并使用它\n array.push(courseId);\n $.ajax({\n url: \"/Courses/SelectUserPost\",\n type: \"POST\",\n data: JSON.stringify(array),\n dataType: \"json\",\n contentType: \'application/json; charset=utf-8\',\n success: function() {\n window.location.href = \"@Url.Content(\"~/Courses/Index\")\";\n }\n });\n }\n});\nC# MVC代码部分。我发送了一个用户列表的int数组,然后进行处理和操作。\n[apcode language="csharp"]
[HttpPost] public ActionResult SelectUserPost(int[] usersListArray) { // 省略了很多代码 return JavaScript("window.location = '" + Url.Action("Index", "Courses") + "'"); // 这个不起作用 return RedirectToAction("Index"); // 这个也不起作用 return RedirectToAction("Index","Courses"); // 这个也不起作用 }
[/apcode]
MVC RedirectToAction Doesn't Work After JSON Post Return 这个问题的出现的原因是,当使用AJAX时,浏览器无法获得重定向的响应。AJAX的success回调函数无法正常工作,因为重定向的响应代码不是2xx状态,而是3xx状态。要解决这个问题,需要检查实际的响应,并根据重定向响应中发送的位置执行手动重定向。
解决方法如下:
//... success: function(response) { if (response.redirect) { window.location.href = response.redirect; } else { //... } } //...
更新部分的解决方法如下:
Controller部分:
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 = ".Content("~/Courses/Index")"; } });
将dataType: 'json'
删除,因为我使用的是自定义的数据类型,而不是JSON。
这个问题的解决方法来源于这个stackoverflow.com/questions/1969476/…。