也许我正在考虑这个错误的方式,我知道页面呈现并被发送到客户端(webbrowser)。但我真的需要理解这一点。
问题 如何异步更新我的三个updatepanel?为了模拟这个,我创建了一个for循环,每次添加一个秒,在找到正确的数字并触发事件之后。 所以我想要做的是能够在webbrowser中看到这些更新何时完成。 时间跨度如下:
TIME
0,0235(只是一个数字,它真的很快发生)
页面上会发生什么?
几乎立刻第一个标签得到了7号更新
的 TIME
0,0235 +一秒= 1,0235
页面上会发生什么?
几乎立刻第二个标签得到了更新号码8
的 TIME
0,0235 +一秒= 2,0235
页面上会发生什么?
几乎立刻第三个标签得到更新号码9
我看过首先向你显示一些文字的页面,几秒钟之后它们会向你显示一个图表,当该请求完成加载时?那么必须有一种方法吗?
继承我的代码,我不会发布我的CounterEventArgs类,它不会影响这个问题。
这是我的index.aspx - codebehind public partial class _Default:System.Web.UI.Page { private testClass _testet;
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager1.RegisterAsyncPostBackControl(Button1);
}
void _testet_CounterFoundNumber(object sender, CounterEventArgs e)
{
switch (e.labelnumber)
{
case 1:
Label1.Text = e.positionen.ToString();
break;
case 2:
Label2.Text = e.positionen.ToString();
break;
case 3:
Label3.Text = e.positionen.ToString();
break;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
testClass testet = new testClass();
_testet = testet;
_testet.CounterFoundNumber += new testClass.CounterEventArgsHandler(_testet_CounterFoundNumber);
_testet.count();
}
}
和来源
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Async="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="updatepanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</form>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="updatepanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</form>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="updatepanel3" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
最后我的测试类
public class testClass
{
public event CounterEventArgsHandler CounterFoundNumber;
public delegate void CounterEventArgsHandler(object sender, CounterEventArgs e);
public int y = 1;
protected virtual void OnCounterFoundNumber(CounterEventArgs e)
{
if (CounterFoundNumber != null)
CounterFoundNumber.BeginInvoke(this, e, new AsyncCallback(this.ResultFoundNumber), null);
}
public void count()
{
for (int i = 0; i < 10; i++)
{
if (i >= 7)
{
OnCounterFoundNumber(new CounterEventArgs(i,y));
y++;
System.Threading.Thread.Sleep(1000);
}
}
}
public void ResultFoundNumber(IAsyncResult ar)
{
CounterFoundNumber.EndInvoke(ar);
}
}
答案 0 :(得分:1)
使用Javascript setInterval method()
代替编写代码在JavaScript函数中触发一些按钮单击事件,为您执行部分postpack并更新面板。
如果您愿意,可以通过设置css属性显示来使按钮不可见:无
如果您使用HTML 5,请检查实施COMET in ASP.Net或 WebSockets 实现。
希望这会对你有帮助!