わかりました、これは私がしばらくの間見た中で最も奇妙なものです...
VS studio 2010 を使用して、asp.net (フレームワーク 4.0) Web サイトを構築しています。私のコード ビハインドは VB.Net にあります。私のテスト ブラウザは Firefox (最新バージョン) で、IE8 と Google Chrome でも同じ動作でテストされています。
基本的に、UpdatePanel の DataRepeater に LinkButton があります。_ItemCommand イベントは、ページを定期的に (数分おきに) 使用している限り発生します。
問題は次のとおりです。別の Web ページを (別のブラウザー タブで) 開いて 1 時間ほどそこに座ってから、ブラウザー タブのテスト ページに戻って LinkButton をクリックすると、イベントが発生せず、ページが表示されません。リロードを取得します。ボタンがちょうど私に死んだかのように。
セッション タイムアウトの問題である可能性がありますが、セッション ID をテキスト ファイルに記録したところ、セッションは期限切れになりませんでした。<<<< TimeOut を検出するための新しいメソッドの使用
問題の根本原因は _ItemCommand イベントの発生が単に停止することであることを確認できます (ログファイル)。なぜそうなるのかわからない。
同様の問題(イベントが発生しない)で提案されたほとんどのソリューションを試しましたが、イベントが発生するため、問題は明らかに異なります...限られた時間だけです。
リピーター ViewState が有効になっています。Button の LinkButton を変更しようとしましたが、同じ問題はありません。私は ScryptManager の AsyncPostBackTimeout を上げようとしました...喜びもありません。sessionState mode="StateServer" を試しました。AVG リンク スキャナーを無効にしようとしました。
だからお願いします、どんなアイデアでも...恥ずかしがらないでください、この時点で私は何でも考える準備ができています.
セッションタイムアウトを確認するために現在使用しているコードは次のとおりです。
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
重要かどうかはわかりませんが、ScriptManager がある master_page を使用します
包括的なテスト シナリオ:
- 参照: http://www.nwosurvivalguide.com/NWOSGN.aspx
- ニュースフィードをクリック(左側)
- 30分ほど放置
- 戻って別のニュースフィードをクリックしてください
結果 >>> イベントは発生しませんが、ページが読み込まれます Page_Init はセッション タイムアウトを検出します。ページを更新すると、すべてが再び機能するようになります。