点击超链接,我想在应用业务逻辑后导航到页面。目前,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);
}
答案 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');
}
})