MVC Ajax调用Action时-OnActionExecuting RedirectResult 无法跳转的处理办法
public class BaseController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (Session["userInfo"] == null) { if (filterContext.HttpContext.Request.IsAjaxRequest()) { filterContext.Result = new HttpStatusCodeResult(499); filterContext.HttpContext.Response.Write("/Desktop/Login/Index"); return; } else { filterContext.Result = new RedirectResult("/Desktop/Login/Index"); return; } } base.OnActionExecuting(filterContext); } } }
(function ($) {
//有可能导致jquery里面的done方法未定义;所以有时候可以全部注释掉; var _ajax = $.ajax; $.ajax = function (opt) { var fn = { error: function (XMLHttpRequest, textStatus, errorThrown) { }, } if (opt.error) fn.error = opt.error; var _opt = $.extend(opt, { error: function (XMLHttpRequest, textStatus, errorThrown) { if (XMLHttpRequest.status == "499") window.location.href = "/Desktop/Login/Index"; else fn.error(XMLHttpRequest, textStatus, errorThrown); } }); _ajax(_opt); }; })(jQuery); $.ajaxSetup({ statusCode: { 499: function (data) { window.location.href = data.responseText; } } });
$.ajax({ type: "POST", url: "/desktop/language/index", data: { language: getCookie("languageCode") }, datatype: "json", success: function (returndata) { //alert("second success"); } });
//如果是Ajax.BeginForm,跳转到登陆页方式为如下:
@using (Ajax.BeginForm("GetSystemStatusTracking", "ReportQuery",
new AjaxOptions() { UpdateTargetId = "TRACKING_NEWLIST",
OnBegin = "showModal",
OnComplete = "hideModal",
OnFailure = "failureProcess"
}))
{
}
function failureProcess(data) {
if (data.status == 499)
window.location.href = (data.responseText == '') ? window.location.href = "/Desktop/Login/Index" : data.responseText;
}
特别注意:当用IIS发布时,客户端访问会报错“ 自定义错误模块不能识别此错误”,但调试时和本机发布本机访问都不会报错;
初步怀疑是服务器和客户端字体解析问题导致。代码需改为如下:
$.ajaxSetup({
statusCode: {
499: function (data) {
window.location.href = "/Desktop/Login/Index";
}
}
});
function failureProcess(data) {
if (data.status == 499) {
window.location.href = "/Desktop/Login/Index";
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?