[英]asp.net button reloading code behind is causing problems
好的,所以我有一個小聊天服務器,從一個小聊天客戶端接收消息。
這個客戶端有一個“發送”按鈕:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox id="ServerDataArea" TextMode="multiline" Columns="50" Rows="15" runat="server" Enabled="false" />
<br />
<asp:TextBox ID="Message" runat="server" ></asp:TextBox>
<asp:Button ID="SendMessage" runat="server" OnClick="SendMessage_Click" Text="Send" />
</ContentTemplate>
</asp:UpdatePanel>
這就是“發送”按鈕想做的事情:
public partial class _Default : System.Web.UI.Page
{
private MessageHandlerThread mHandler;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
mHandler = new MessageHandlerThread(ServerDataArea);
}
}
/// <summary>
/// send message
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void SendMessage_Click(object sender, EventArgs e)
{
Debug.WriteLine("send clicked");
if (Message.Text != "")
{
mHandler.StoreMessage(Message.Text);
}
}
}
當我第一次運行網站時,我的小服務器告訴我“客戶端已連接”並且它的一切都很好但是當我按下“發送”按鈕時它會因為以下原因而對我大喊大叫:
Object reference not set to an instance of an object.
意思是mHandler = null,這對我來說是一個大問題,它根本不是我想要的。 我想使用第一次加載頁面時創建的mHandler。 如果我從“Page_Load”中刪除“if(!IsPostBack)”,每次按“發送”時它都會建立一個新連接,這也不是我想要的,因為我想使用相同的TcpClient連接來接收數據以及發送它在我的客戶端線程中。
將mHandler保存在會話狀態,它將在回發中保持不變(假設代碼在一個Web服務器上運行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.