在我的Web应用程序中,我使用jquery对话框打开弹出窗口。 用于执行此任务的函数是:
function OpenPopup(popupTarget, width, height, params, onOpenFunction, onCloseFunction, popupElement){
// some code to parse the parameters
//`popupElement` is a div with `style="display: none;"`
// included in a master page which every page inherits from
$(popupElement).dialog(
{
autoOpen: false,
resizable: false,
height: height,
width: width,
modal: true,
open: onOpenFunction,
closeOnEscape: false,
close: function (e)
{
var popupResult = $(this).dialog("option", "notification");
$(this).dialog("destroy");
if (!isHTMLElement)
popupFrame.css("visibility", "hidden");
if (jQuery.isFunction(onCloseFunction))
{
var funct = eval(onCloseFunction);
funct(popupResult);
}
}
});
$(popupElement).dialog("open");
}
这是调用上述方法的函数:
function FiltroNotifiche(){
params = "";
OpenPopup("~/manage/Popup/FiltroNotifiche.aspx", 450, 350, params, function (e) { }, function (strNotification)
{
OnPopupReturn(true, strNotification, function ()
{
__doPostBack('UpdatePanel', 'Filtro=true');
});
});
}
function OnPopupReturn(bRefresh, strNotification, senderFunction){
// this function parses strNotification and if, successful, calls:
var funct = eval(senderFunction);
funct();
}
在弹出窗口中我使用ICallbackEventHandler
回调接口。
问题是在打开和关闭弹出窗口后(我可以看到正在执行的回调和所有),无论我接下来做什么,我都会被踢出去,很可能是因为会话已经过期。
我注意到一件奇怪的事情是,只有当我到达通过菜单控件打开弹出窗口(GestioneNotifiche.aspx)的页面时,才会发生 ,因为如果我通过按钮到达那里PostBackUrl在另一个页面中,这不会发生,并且会话幸福快乐!
该菜单有一个xml数据源和这些绑定:
<DataBindings>
<asp:MenuItemBinding DataMember="Menu" TextField="Text" Selectable="false" />
<asp:MenuItemBinding DataMember="MenuItem" NavigateUrlField="NavigateUrl" TextField="Text" ValueField="Value" />
</DataBindings>
这是菜单项:
<MenuItem Value="" Text="Gestione notifiche" NavigateUrl="~/manage/GestioneNotifiche/GestioneNotifiche.aspx" />
我确实注意到通过菜单调用Request.HttpMethod = "GET"
,而通过回发它(显然)"POST"
。这可能是重要的吗?我对GET和POST之间的区别并不是很了解。
谢谢
答案 0 :(得分:0)
听起来您的问题是正在清除身份验证而不是您的会话。检查您的page_load事件,看看您是否在GET和POST请求之间做了任何不同的事情,这将导致清除身份验证。