MVC RedirectToAction在JSON后的返回中不起作用

19 浏览
0 Comments

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]

0
0 Comments

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/…

0