Хорошо, это самая странная вещь, которую я видел за последнее время ...
Я использую VS studio 2010 для создания веб-сайта asp.net (framework 4.0). Мой код находится на VB.Net. Мой тестовый браузер - Firefox (последняя версия), также протестированный на IE8 и Google Chrome, такое же поведение.
В основном у меня есть LinkButton в DataRepeater в UpdatePanel.
Событие _ItemCommand ОГНЕТСЯ, пока я регулярно пользуюсь страницей (каждые несколько минут или около того).
Проблема заключается в следующем: когда я открываю другую веб-страницу (в другой вкладке браузера) и просматриваю ее примерно 1 час или около того, а затем возвращаюсь на тестовую страницу во вкладке браузера и нажимаю кнопку LinkButton, событие не запускается и страница получает перезагрузку. Как будто кнопка только что умерла от меня.
Сначала я решил, что это может быть проблема Session TimeOut, но я зарегистрировал SessionID в текстовом файле, и сессия НЕ истекает. <<<< Использование нового метода для обнаружения TimeOut </p>
Я могу подтвердить (logfiles), что корень моей проблемы в том, что событие _ItemCommand просто перестает запускаться. Я просто понятия не имею, почему это так.
Я испробовал большинство решений, предложенных для аналогичных проблем (событие не запускается), но моя проблема явно отличается, потому что мое событие срабатывает ... Только в течение ограниченного времени.
Мой репитер ViewState включен.
Я попытался изменить LinkButton для кнопки, но без радости та же проблема.
Я попытался поднять AsyncPostBackTimeout ScryptManager ... тоже не радует.
Я пробовал sessionState mode = "StateServer".
Я попытался отключить AVG Link Scanner.
Так что ПОЖАЛУЙСТА, любая идея ... Не стесняйтесь, на данный момент я готов рассмотреть все.
Вот код, который я сейчас использую, чтобы проверить время ожидания сеанса:
If Context.Session IsNot Nothing And Context.Session.IsNewSession _
And Page.Request.Headers("Cookie") IsNot Nothing _
And Page.Request.Headers("Cookie").IndexOf("ASP.NET_SessionId") >= 0 Then
'SESSION HAS TIMEDOUT
End If
ЗДЕСЬ МАРШРУТ СТРАНИЦЫ
<asp:UpdatePanel ID="udpRSSFeeds" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="cmdSearch" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="drpNewsFeed" EventName="ItemCommand" />
<asp:AsyncPostBackTrigger ControlID="cmdViewAll" EventName="Click" />
</Triggers>
<ContentTemplate>
<table class="Borderless" cellpadding="0" cellspacing="0" style="width:100%">
<tr><td class="lblHeaderText">NEWS FEEDS</td></tr>
<%--BEGIN: SEARCH GIZMO--%>
<tr><td>
<table class="Borderless" style="width:100%;" cellpadding="0" cellspacing="0">
<tr>
<td style="text-align:right; vertical-align:middle; height:32px;" >
<asp:TextBox ID="tbxSearchBox" runat="server" MaxLength="50" AutoCompleteType="None" Font-Size="16px" style="height:20px; width:187px; font-size:16px; border-style:solid; border-color:#54d242;" onfocus="Javascript:this.focus();this.select();" ></asp:TextBox>
</td>
<td style="text-align:left; vertical-align:middle; width:150px; height:32px;" >
<asp:ImageButton ID="cmdSearch" ImageUrl="~/GUIImages/cmdSearch.jpg" ToolTip="Search feed(s) for keyword(s)." Height="26px" Width="26px" runat="server" BorderStyle="None" ImageAlign="Middle" />
</td>
</tr>
</table>
</td></tr>
<%--END: SEARCH GIZMO--%>
<%--BEGIN FEED LIST--%>
<tr><td style="padding:3px 0px 3px 0px;"><asp:LinkButton ID="cmdViewAll" runat="server" CssClass="MenuItemActive" PostBackUrl="" CausesValidation="false" Text="* View ALL RSS Feeds"></asp:LinkButton></td></tr>
<asp:XmlDataSource ID="xdsNewsFeed" runat="server" DataFile="App_Data/RSSFeeds.xml" XPath="dataroot/qryRSSFeed"></asp:XmlDataSource>
<asp:Repeater ID="drpNewsFeed" runat="server" DataSourceID="xdsNewsFeed" EnableViewState="true" >
<ItemTemplate>
<tr><td style="padding:3px 0px 3px 0px;">
<asp:LinkButton ID="cmdSelectNewsFeed" runat="server" CssClass="MenuItem" CausesValidation="false" CommandName='<%#XPath("ID")%>'>- <%#XPath("Title")%></asp:LinkButton>
</td></tr>
</ItemTemplate>
</asp:Repeater>
<%--END FEED LIST--%>
<tr><td> </td></tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
ЗДЕСЬ КОД СТРАНИЦЫ позади
Protected Sub drpNewsFeed_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles drpNewsFeed.ItemCommand
Dim oLogger As New nebLogManager("TESTNWOSGN.txt")
oLogger.TraceStart("drpNewsFeed_ItemCommand (" & Session.SessionID & ")")
'some code that never gets run because the event is not fired...
oLogger.TraceStop("drpNewsFeed_ItemCommand (" & Session.SessionID & ")")
End Sub
Protected Sub cmdSearch_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles cmdSearch.Click
Dim oLogger As New nebLogManager("TESTNWOSGN.txt")
oLogger.TraceStart("cmdSearch_Click (" & Session.SessionID & ")")
'some code that never gets run because the event is not fired...
oLogger.TraceStop("cmdSearch_Click (" & Session.SessionID & ")")
End Sub
Не уверен, если это важно, но он использует master_page, на котором сидит ScriptManager
Сценарий комплексного тестирования:
- ПОИСК К: http://www.nwosurvivalguide.com/NWOSGN.aspx
- ЩЕЛКНИТЕ НА ЛЕНТУ (Левая сторона)
- Давайте посидим 30 минут
- ВЕРНУТЬСЯ и нажать на другую ленту новостей
Результат >>> Событие не сработало, но страница загружается
Page_Init обнаруживает время ожидания сеанса.
Если вы обновите страницу, все снова станет функциональным.