这引发了另一个线程的问题....但是更有希望集中在一点!
我有一个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 :(得分: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();
}