从另一个类更新updatepanel

时间:2017-04-10 17:24:03

标签: c# asp.net controls updatepanel

我有一个defualt.aspx,其中包含一个updatepanel。然后我有一个类myTCPClient.cs,其中我有一个tcpclient。当它收到消息时,它会产生一些魔力,然后它应该通过执行updatepanel1.Update()来更新updatepanel。但是我如何访问updatepanel?

我唯一的解决方法是将updatepanel传递给班级。但是这样做的方法是什么?必须有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您需要使用Timer来轮询更改。你可以使用这样的东西:

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        string s = (string)Session["Text"];
        Session["Text"] = String.Empty;

        bool hasNewText = !String.IsNullOrEmpty(s);

        if (hasNewText)
        {
            txtOut.Text += s;
            UpdatePanel1.Update();
        }
    }

您的后台进程会在接收数据时将文本附加到Session [“Text”]中。您将禁用计时器以启动它,并在您启动后台进程时启用它。

您的UpdatePanel可能如下所示:

    <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="False">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnOK" />
        </Triggers>
        <ContentTemplate>
            <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick" />
            <asp:TextBox ID="txtOut" ReadOnly="true" runat="server" Width="600px" Height="299px" Font-Names="Courier New" 
                         TextMode="MultiLine"></asp:TextBox>
        </ContentTemplate>
    </asp:UpdatePanel>

ChildrenAsTriggers="False"很重要,因为它会告诉您的更新通道每次定时器回发时都不会更新,但只有在您调用UpdatePanel1.Update()时才会更新。