2011-09-20 128 views
1

我有一個asp.net頁面,一個簡單的博客,它看起來像Asp.net頁面超時altough按鈕被點擊更新面板

<asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine">Default Text</asp:TextBox> 
<asp:LinkButton ID="lbSend" runat="server" Text="Send" OnClick="lbSend_Click" /> 

<script type="text/javascript"> 
    //some javascript to click btnSave in update panel for every five minutes. 
</script> 

<asp:UpdatePanel ID="upSave" runat="server" Style="display: none;"> 
    <ContentTemplate> 
     <asp:Button ID="btnSave" runat="server" Text="Button" OnClick="btnSave_Click" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 

而且在後面

protected void lbSend_Click(object sender, EventArgs e) 
{ 
    //Gets UserID from session and saves it to table A with txtContent 
} 
protected void btnSave_Click(object sender, EventArgs e) 
{ 
    //Gets UserID from session and saves it to table B with txtContent 
} 

一切代碼作品沒關係。我填寫表單並將內容插入帶有lbSend或btnSave的表格中。 JavaScript也在點擊btnSave。但是,當填充txtContent需要很長時間時,大約40分鐘或更長時間,頁面就像過期一樣。點擊lbSend以異步方式刷新頁面,並且你寫的所有內容都消失了。這就像頁面已經睡過,當我點擊時醒來。當你再次點擊它時,lbSend正常工作。

這個「睡眠」的原因是什麼btnSave繼續與服務器通信?我怎樣才能防止它。

+0

40分鐘?!?表A和B有多少條記錄?這些指數是什麼樣的? –

+0

我不確定大約40分鐘,我無法測量它。表格中沒有問題。我忘了說這些表在SQL Server中。 – sevenkul

回答

1

您正在做一個Ajax帖子。由於它是一個異步的帖子,您的瀏覽器會愉快地繼續前進,直到出現錯誤時纔會發現問題。如果它不是Ajax,那麼整個頁面將會刷新,並且您會看到一個錯誤 - 假設您以友好的格式顯示錯誤。

在實現Ajax時,您應該實現自己的錯誤處理程序,以便向用戶顯示發生了錯誤。另外,您應該實現浮動div或對話框,以防止用戶在完成Ajax請求之前使用您的網頁。我意識到40分鐘對於一個簡單的插入實際上是非常糟糕的,但我會留給你的DBA來解決。

讓我們來談談浮動div或對話框或「模態彈出」。你想在before_Ajax_send函數中打開它,並在after_Ajax_receive函數中關閉它。請參閱您的Ajax庫文檔以獲取有關這些功能的更多信息。

當你實現這個對話框時,它會增強你的用戶體驗,因爲它可以讓用戶知道你的應用程序正在做某件事情,所以請把你的馬抱在一起。

希望這會有所幫助。

+1

VS 2008 JavaScript調試Scott Guthrie - http://weblogs.asp.net/scottgu/archive/2007/07/19/vs-2008-javascript-debugging.aspx –

+0

謝謝,我用FireBug調試解決了這個問題。問題是JavaScript,但它沒有給出任何錯誤。此外,JavaScript點擊btnSave兩天前工作得很好,它是這樣的:'var interval = setInterval(「updateCounter();」,10 * 1000);'我不明白爲什麼它成爲一個問題。我通過用sayacFonksiyonu()重命名函數updateCounter()來解決它。 – sevenkul

+0

後來我意識到我在主傳呼機中使用了一個名稱相同的名稱爲updateCounter()的函數,這是所有問題的根源。 – sevenkul