我有一个包含updatepanel的defualt.aspx。然后我有一个类,myTCPClient.cs,我有一个tcpclient。当它收到一条消息时,它执行一些魔术,然后通过执行updatepanel1.Update()更新updatepanel。但是,我如何访问updatepanel?从另一个类更新更新面板
我唯一的解决办法是将updatepanel传递给类。但是,这是做到这一点的方式吗?一定会有更好的办法?
我有一个包含updatepanel的defualt.aspx。然后我有一个类,myTCPClient.cs,我有一个tcpclient。当它收到一条消息时,它执行一些魔术,然后通过执行updatepanel1.Update()更新updatepanel。但是,我如何访问updatepanel?从另一个类更新更新面板
我唯一的解决办法是将updatepanel传递给类。但是,这是做到这一点的方式吗?一定会有更好的办法?
您将需要使用计时器轮询更改。您可以使用这样的:因为它接收数据
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();
}
}
你的后台进程将追加文本会话[“文本”。您可以禁用定时器,并在启动后台进程时启用它。
你的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"
是很重要的,因为它告诉你的UpdatePanel不是每次更新计时器回发,但只有当你调用UpdatePanel1.Update()。
谢谢。这解决了我的问题,并做我需要的。我只是希望你能访问它。 –
如果你有时间,看看SignalR - http://signalr.net/ – sh1rts
你想在后台做些什么,然后发送消息到UpdatePanel(坐在某人的浏览器的页面上)来刷新?因为那不会那样明确地工作。 UpdatePanel更新(或不)对浏览器的请求和响应。我怀疑你想要做的是设置一个Timer来轮询更新,并将Timer设置为UpdatePanel上的AsyncPostbackTrigger。 –
在后台运行tcpclient。当客户端收到消息时,我希望它更新时间。所以它只会在有新消息时更新,而不是每隔一秒左右。 –
这实际上并不是网页的工作原理。您不能将数据从后端推送到客户端的浏览器。网页浏览器必须发送请求。 –