簡體   English   中英

asp.net按鈕重新加載代碼背后導致問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM