Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用ajax和模式窗口处理会话结束的最佳方法_.net_Ajax_Session_Modal Dialog - Fatal编程技术网

.net 使用ajax和模式窗口处理会话结束的最佳方法

.net 使用ajax和模式窗口处理会话结束的最佳方法,.net,ajax,session,modal-dialog,.net,Ajax,Session,Modal Dialog,我有一个.NETMVC应用程序,它广泛使用AJAX和模态窗口。我有一个操作过滤器,用于处理重定向到登录页面的用户会话的过期。但是,如果请求是从模式窗口发出的,则返回的操作结果是登录页面,然后在模式窗口中加载该页面 我一直在试图找到一种方法,在会话到期时将主页重定向到登录,但我没有这样的运气,因为会话结束事件是从服务器触发的,我无法访问响应对象。我想知道是否有人遇到过这样的问题,如果是,你是如何克服的?我想我终于找到了解决办法。虽然它不像我所希望的那样优雅,但它确实有效(这比我目前发现的要多)。解

我有一个.NETMVC应用程序,它广泛使用AJAX和模态窗口。我有一个操作过滤器,用于处理重定向到登录页面的用户会话的过期。但是,如果请求是从模式窗口发出的,则返回的操作结果是登录页面,然后在模式窗口中加载该页面


我一直在试图找到一种方法,在会话到期时将主页重定向到登录,但我没有这样的运气,因为会话结束事件是从服务器触发的,我无法访问响应对象。我想知道是否有人遇到过这样的问题,如果是,你是如何克服的?

我想我终于找到了解决办法。虽然它不像我所希望的那样优雅,但它确实有效(这比我目前发现的要多)。解决方案围绕OnBegin AjaxOption和一些Jquery。我的ActionLink(它也可以是一个Ajax.BeginForm,适用于)如下所示

<%= Ajax.ActionLink("Do Ajax Function", "AjaxAction", new { }, new AjaxOptions { OnBegin="check_session", OnSuccess = "ajaxSuccess", UpdateTargetId = "update_container"}, new { })%>  
最后一部分是指定为OnBegin处理程序的check_会话函数。jQueryAjax调用点击会话检查操作并检查响应。如果响应为“True”(表示会话已过期),则会将页面位置设置回主页(在本例中为google)

功能检查\u会话(){
var url='';
//获取检查会话
$.ajax({
url:url,
成功:功能(数据){
//警报(数据);
如果(数据==“真”){
document.location=”http://www.google.com";
}
},
错误:函数(){alert(“加载ajax会话检查时出现问题”);}
});
}

如果使用这种方法,有几件事需要记住。首先,这将异步运行。如果您有正在调用的数据敏感代码,则仍然需要对会话执行服务器端检查。如果会话在ajax调用期间过期,则此代码仅用于重定向到登录页面(或主页)。第二件事是check_会话函数需要连接到所有Ajax调用的OnBegin事件中。如果有人对改进这种方法有任何建议,我很乐意听取他们的意见。我希望这对其他人有所帮助。

您能否在登录页面中检查您是否在模式对话框中运行,如果是,请使用javascript刷新整个页面,而不仅仅是模式对话框?(不知道怎么做,所以没有添加答案:)。我已经对此进行了研究,但问题是请求(以及随后的响应)的上下文是模态对话框。我无法访问页面上下文来重定向它,只能重定向到模式窗口。
[OutputCache(Duration=0, VaryByParam="None")]
        public ActionResult CheckAjaxSessionExpired()
        {

            bool _sessionExpired = false;
            if (Session["User"] == null)
            {
                _sessionExpired = true;
            }

            return Content(_sessionExpired.ToString());
        }
function check_session(){

        var url = '<%= Url.Action("CheckAjaxSessionExpired", "Account") %>';


        //GET CHECK SESSION
        $.ajax({
            url: url,
            success: function(data) {

                //alert(data);

                if (data == "True"){
                    document.location = "http://www.google.com";
                }
            },
            error: function() { alert("there was a problem loading the ajax session check"); }
        });
    }