2013-01-15 106 views
1

这导致了另一个线程的问题....但更多地集中在一点希望!UpdatePanel.Update()没有实时更新

我有一个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,但他们都一起出现。

+0

我的方式成立的ScriptManager ...的 Adam

+3

我认为您需要了解客户端代码和服务器端代码之间的区别,以及每个端点会发生什么 – freefaller

回答

1

您提供的代码将在服务器上设置message1.Text中的值,在服务器上等待5秒钟,然后在服务器上设置message2.Text ...然后它将一切返回给客户端。这就是为什么你看到它在同一时间更新。

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

对于这一点,你可能将不得不看两个<asp:UpdatePanel>对象,或者自己写AJAX处理代码在JavaScript/jQuery的

+0

感谢球员...... 。我是AJAX新手,MSDN描述让我觉得我可以做到这一点...我会在重新调用另一个回发的方式发出客户调用... – Adam

+0

不要在此引用我,@Adam,但尝试查看''元素'的'。你应该能够自动设置两个面板同时关闭,其中一个可以让你的内置“睡眠”延迟 – freefaller

+0

@freefaller你不想这样做。您希望正常执行第一个请求,然后返回到客户端,然后使用“Timer”使客户端在设定的时间段后触发第二个回发,然后处理第二个回发。 – Servy

2

您在面板上调用Update,但由于它发生在服务器端,所以两个调用基本上都在客户端同时执行。拨打Update在呼叫返回之前不起作用。你需要两个独立的调用,或者一个客户端触发器来使它按照你所描述的方式工作。

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