2012-02-07 4 views
2

В моем веб-приложении я использую диалоги jquery для открытия всплывающих окон. Функция, используемая для выполнения этой задачи заключается в следующем:Сессия заканчивается после закрытия диалога 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", в то время как с помощью postback это (довольно очевидно) "POST". Может ли это быть значительным? Я не очень разбираюсь в различиях между GET и POST.

Спасибо

+0

Что заставляет вас думать, что сеанс действительно заканчивается. После того, как вас «выгнали», можете ли вы вернуться к адресу и использовать debug, проверьте, содержит ли сессия переменные, которые вы ожидаете от него? –

+0

С «kick out out» я имел в виду, что меня перенаправляют на страницу входа в приложение; Я не могу просто набрать адрес и загрузить страницу снова – Piddu

+0

, поэтому кажется, что ваша аутентификация очищается ... не сеанс. У вас есть код в page_load, который используется для определения того, аутентифицирован ли пользователь и перенаправляется ли он, если он не является? Если да, вставьте его. –

ответ

0

Похоже, ваша проблема в том, что проверка подлинности очищаются и не сеанс. Проверьте событие page_load, чтобы узнать, не делаете ли вы что-либо другое между запросами GET и POST, которые приведут к очистке аутентификации.

Смежные вопросы