zoukankan      html  css  js  c++  java
  • 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";
      }
    }

     
    
    
    
     
  • 相关阅读:
    [原]openstack-kilo--issue(十一)Failed connect to 169.254.169.254:80; No route to host
    [转]pycharm active code
    [原]openstack-kilo--issue(九) heat stacks topology中图形无法正常显示
    [原]CentOS 7 网卡子接口的创建
    [转]Shell中read的常用方式
    [转]输出带颜色的shell
    第十七节:从状态机的角度async和await的实现原理(新)
    第十六节:时隔两年再谈异步及深度剖析async和await(新)
    第十一节:SQLServer事务写法、各种锁、事务隔离级别
    第十七节:SQL中的一些常用SQL积累(持续更新)
  • 原文地址:https://www.cnblogs.com/turnip/p/10818657.html
Copyright © 2011-2022 走看看