UpdatePanel.Update()不实时更新

时间:2013-01-15 15:01:14

标签: c# asp.net ajax

这引发了另一个线程的问题....但是更有希望集中在一点!

我有一个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();

我希望看到亚当出现,然后在5秒后看到Adam2,但他们都出现在一起。

3 个答案:

答案 0 :(得分:2)

您在面板上调用Update,但由于它在服务器端发生,因此两个调用基本上都是在客户端上同时执行的。在返回呼叫之前,呼叫Update无效。您需要两个单独的调用,或者客户端触发器,以使其按照您所描述的方式运行。

答案 1 :(得分:1)

您提供的代码将设置message1.Text在服务器上的值,在服务器上等待5秒,然后在服务器上设置message2.Text ...然后它会将所有内容发送回客户一气呵成。这就是为什么你看到它同时更新的原因。

如果您希望在不同时间更新它们,则需要更复杂的编码才能在服务器上调用两个单独的内容,并单独显示它们。

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

答案 2 :(得分:0)

尝试将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();
}