我有一個包含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。當客戶端收到消息時,我希望它更新時間。所以它只會在有新消息時更新,而不是每隔一秒左右。 –
這實際上並不是網頁的工作原理。您不能將數據從後端推送到客戶端的瀏覽器。網頁瀏覽器必須發送請求。 –