2012-12-06 56 views
0

Maybee我想这是错误的方式,我知道页面呈现并发送到客户端(网页浏览器)。但我真的需要了解这一点。ASP.NET 4.0 Webforms - 异步更新3面板

问题 如何更新我的三个更新面板异步?为了模拟这个,我创建了一个for循环,每找到一个正确的数字并且触发事件,每次都会增加一个循环。 所以我想要做的是能够在web浏览器中看到这些更新何时完成。 的时间跨度会是这样的:

TIME
0,0235(只是一个数字toshow真的发生快速)
在页面上会出现什么情况? 几乎瞬间第一个标签获取与7号 TIME
0,0235 +1秒= 1,0235 页面上会发生什么更新? 几乎瞬间第二标签上获得的有8个 TIME
0,0235 +1秒= 2,0235 页面上会发生什么更新? 几乎瞬间第三标签获得与9号

更新我ahve造访的页面,首先告诉你一些文本和一个几秒钟,他们告诉你一个图后,当请求已完成加载?所以一定有一个方法可行吗?

继承人我的代码,我没有发布我的CounterEventArgs类它的工作原理,不影响问题。

这里是我的Index.aspx - 代码隐藏 公共部分类_Default:System.Web.UI.Page { 私人的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> 

而且最后我的TestClass

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

回答

1

相反,在代码编写的后面尝试使用Javascript setInterval method()

在JavaScript函数触发一些,做了局部邮用你和更新面板按钮单击事件

如果你愿意,你可以通过设置CSS属性DISPLY使按钮为不可见:无

或者请执行COMET in ASP.Net的WebSockets实现,如果你使用HTML 5

希望这会帮助你!

+0

引用w3school是个坏主意。 http://w3fools.com/ –

+0

@Ravi:谢谢你的信息。是否有任何其他来源可以很简单地解释为w3schools? –

+0

它可能不是简单的,但准确:) https://developer.mozilla.org/en-US/docs/DOM/window.setInterval –