updateppanel . update()没有实时更新

本文关键字:实时更新 update updateppanel | 更新日期: 2023-09-27 17:53:11

这源于另一个线程....的问题但希望是更专注于一点!

我有一个AJAX更新面板

<asp:UpdatePanel
     ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
           <ContentTemplate>
                                <asp:Label ID="lblMessage1" runat="server" />
                                <asp:Label ID="lblMessage2" runat="server" />
                                <asp:Button ID="btnTrigger" runat="server"        onclick="Button1_Click" style="visibility:hidden"/>
              </ContentTemplate>
 </asp:UpdatePanel>

后面的代码是

 protected void Button1_Click(object sender, EventArgs e)
    {
        Type cstype = this.GetType();
        Label message1 = (Label)(FindControl("lblMessage1"));
        Label message2 = (Label)(FindControl("lblMessage2"));
        message1.Text = "adam";
        UpdatePanel1.Update();
        Thread.Sleep(5000);
        message2.Text = "adam2";
        UpdatePanel1.Update();

我想看到Adam在5秒后出现,然后是Adam2,但是它们同时出现

updateppanel . update()没有实时更新

您在面板上调用Update,但由于它发生在服务器端,因此两个调用本质上是同时在客户机上执行的。呼叫Update直到被返回才会生效。您将需要两个单独的调用,或者一个客户端触发器来使其按照您所描述的方式运行。

您提供的代码将设置message1.Text ON The SERVER中的值,等待5秒ON The SERVER,然后设置message2.Text ON The SERVER…然后,它会一次性将所有内容发送回客户端。这就是为什么你会看到它同时更新。

如果你想在不同的时间更新它们,你将需要更复杂的编码来调用服务器上的两个独立的东西,并独立显示它们。

为此,您可能需要查看两个<asp:UpdatePanel>对象,或在javascript/jquery中编写自己的AJAX处理代码

尝试将2个标签,2个按钮分离到2个不同的更新面板中。然后连续5秒一个接一个地触发它们:

HTML:

<asp:UpdatePanel
     ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
           <ContentTemplate>
                <asp:Label ID="lblMessage1" runat="server" />
                <asp:Button ID="btnTrigger1" runat="server"        onclick="Button1_Click" style="visibility:hidden"/>
              </ContentTemplate>
 </asp:UpdatePanel>
<asp:UpdatePanel
     ID="UpdatePanel2" runat="server" UpdateMode="Conditional" >
           <ContentTemplate>
                 <asp:Label ID="lblMessage2" runat="server" />
                 <asp:Button ID="btnTrigger2" runat="server"        onclick="Button2_Click" style="visibility:hidden"/>
           </ContentTemplate>
 </asp:UpdatePanel>
<script>
     window.onload = function(){
          document.getElementById("<%= btnTrigger1.ClientID %>").click();
          // wait 5 secs to trigger 2nd button
          setTimeout(function(){
                document.getElementById("<%= btnTrigger2.ClientID %>").click();
          }, 5000);
     };
</script>
CS:

protected void Button1_Click(object sender, EventArgs e)
{
    Type cstype = this.GetType();
    Label message1 = (Label)(FindControl("lblMessage1"));
    message1.Text = "adam";
    UpdatePanel1.Update();
}
protected void Button2_Click(object sender, EventArgs e)
{
    Type cstype = this.GetType();
    Label message2 = (Label)(FindControl("lblMessage2"));
    message2.Text = "adam2";
    UpdatePanel1.Update();
}