asp.net按钮重新加载代码背后导致问题

时间:2014-02-24 10:23:47

标签: c# asp.net code-behind

好的,我有一个小聊天服务器,可以从一个小聊天客户端接收消息。

此客户端有一个“发送”按钮:

<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连接来接收数据以及发送它在我的客户端线程中。

1 个答案:

答案 0 :(得分:2)

将mHandler保存在会话状态,它将在回发中保持不变(假设代码在一个Web服务器上运行)。