ASP.Net MVC 3 JsonResult重定向错误

时间:2012-04-25 17:39:25

标签: asp.net-mvc asp.net-mvc-3

我有一个ASP.Net MVC 3应用程序,它使用jQuery .ajax调用POST到服务器端控制器操作,如下所示

客户端jQuery调用:

//Page the server
        $.ajax({
                url: '/Home/Call_Abort',
                type: 'POST',
                data: "{ 'op_id': '" + ajaxOPID + "', 'statMsg': '" + ajaxStatMsg + "'}",
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                        window.location.href = data.redirectUrl;
                },
                error: function (xhr, ajaxOptions, thrownError) {
                        alert("Error while paging the server to abort.  Reported error: '" + xhr.responseText + "'.");
                }
        });

服务器控制器操作:

[HttpPost]
public JsonResult Call_Abort(string op_id, string statMsg)
{
    return Json(new
    {
        redirectUrl = Url.Action("Operator_Home", "Home", new { op_id = op_id, status = statMsg }),
        isRedirect = true
    });

}

返回URL应该将用户重定向到另一个视图(即Operator_Home视图)。这适用于我的本地开发PC,按预期路由到Operator_Home View,但是当我在我的开发Web服务器(带有IIS 7的Server 2008)上运行它进行测试时,我得到以下404错误页面,因为 xhr .responseText 会导致上面的.ajax调用。

enter image description here

似乎正在发生的事情不是重定向到我在 redirectURL 中指定的视图(即Operator_Home),它似乎认为Call_Abort控制器动作应该返回一个Call_Abort视图,因为没有此类视图存在以下错误被抛出。但是为什么会在Web服务器上而不是在我运行Visual Studio dev服务器的本地PC上发生?是否有一些设置我需要在IIS上调整我的应用程序,以使其在我的开发机器上运行。我对MVC路由的理解还不清楚,为什么会发生这种情况。任何帮助或见解都表示赞赏。

更新

我很抱歉,我在雇员处有几台服务器,我正在引用错误的Web服务器。我正在运行它的服务器是带有IIS7的Server 2008

enter image description here

1 个答案:

答案 0 :(得分:0)

该错误原来是一个问题,其中的URL .Ajax调用我修改了URL如下:

//Page the server
var abortURL = window.location.origin + '/myApp/Home/Call_Abort';
        $.ajax({
                url: abortURL,
                type: 'POST',
                data: "{ 'op_id': '" + ajaxOPID + "', 'statMsg': '" + ajaxStatMsg + "'}",
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                        window.location.href = data.redirectUrl;
                },
                error: function (xhr, ajaxOptions, thrownError) {
                        alert("Error while paging the server to abort.  Reported error: '" + xhr.responseText + "'.");
                }
        });

这解决了问题并允许jQuery完成POST。