2012-12-06 103 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 –