2010-11-04 30 views
1

我試圖使用ajax控件工具包進行網絡聊天。有一個腳本mannager,更新面板和計時器。刷新更新面板如果用戶當時正在寫入,請避免出現問題

我插入了用於顯示用戶引入的每個文本的文本框,寫入的文本和發送按鈕都沒有了。它工作的很好,但如果即時在刷新時間的準確時刻寫入一些文本(絞車發生很多,因爲它每3秒)它不會讓我正確寫入導致文本框的一種眨眼,你錯過了一封信。所以,在不損失寫作流暢性的情況下,這是做這件事的正確方法。

謝謝。

回答

1

我建議你創建2個文本框:一個用於輸入,另一個用於輸出。用於輸入的應該放置在更新面板之外,所以它不會被刷新。您還需要將此文本框或其發送按鈕作爲觸發器添加到更新面板。與此相似example

這裏是我試過的代碼和它的工作原理:

.aspx的:

 <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 
     <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="2000" Enabled="True"> 
     </asp:Timer> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Button1_Clicked" /> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
       <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Label ID="Label1" runat="server" Text="" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

和C#:

protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     Label1.Text = DateTime.Now.ToString(); 
    } 

    protected void Button1_Clicked(object sender, EventArgs e) 
    { 
      Label1.Text = String.Format("{0}: {1}", DateTime.Now.ToString(), TextBox1.Text); 
    } 
+0

是的,我把兩個文本框那樣,一個內部更新面板和一個外部,但眨眼仍然發生,併發送文本即時消息不使用triguers的事件,但我沒有問題,這個問題只是令人耳目一新。請幫忙。 Tnks – 2010-11-04 20:29:10

+0

我在以前的文章中添加了一些代碼。如果控件在更新面板之外,則不應該有任何閃爍,可能是您做了其他影響您控制的事情? – 2010-11-04 20:48:02

+0

您應該在更新面板外部使用該觸發器按鈕,否則按鈕單擊事件將刷新整個頁面。 – 2010-11-04 21:26:04