1

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

我有一个 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,但它们都同时出现。

4

3 回答 3

2

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

于 2013-01-15T15:04:30.550 回答
1

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

如果您希望它们在不同时间更新,您将需要更复杂的编码来调用服务器上的两个独立事物,并独立显示它们。

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

于 2013-01-15T15:05:21.467 回答
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();
}
于 2013-01-15T15:17:05.310 回答