MVC重定向不会导航到页面

时间:2016-03-08 08:53:47

标签: ajax redirect model-view-controller

点击超链接,我想在应用业务逻辑后导航到页面。目前,mvc操作中的“返回重定向(Url)”未导航到该页面。

$("a").bind("click", function (e) {
        e.preventDefault();
        gotoUrl($, this.href);
    });

gotoUrl: function ($, href) {
    $.ajax({
            type: "POST",
            url: 'mycontroller/myaction',
            data: { url: href },
            dataType: 'json',
            cache: false
            success: function (data) { }          
        });
}

//mycontroller
[HttpPost]
public ActionResult myaction(string url)
{
    //Some business logic here to update url
    return Redirect(url);
}

1 个答案:

答案 0 :(得分:0)

为了更改当前窗口位置,您需要检测到您的ajax请求被重定向(并在之后手动重定向),这是不可能的,因为jquery将遵循重定向。在类似的情况下,我实现了以下更常见的解决方法,但您可以根据自己的需要进行调整。

在Application_EndRequest的global.asax创建处理程序中,拦截重定向响应并将响应代码重写为代表错误的其他内容,我使用代码422 - Unprocessable Entity。

protected void Application_EndRequest()
{
 if (Context.Response.StatusCode == 302 && Context.Request.IsAjaxRequest())
 {
  Context.Response.StatusCode = 422;
 }
}

在客户端脚本中,您现在需要通过添加常规的ajax错误处理程序来检测这422个响应。

$(document)
  .ajaxError(function (e, xhr, settings) {
    if (xhr.status == 422) {
     window.location = xhr.getResponseHeader('Location');
    }
  })