2012-01-07 76 views
0

我有一個使用腳本管理器的母版頁,在另一頁上,我想顯示一個從0到10分鐘計數的數字時鐘。 asp.net代碼:使用定時器不能更新標籤

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> 
</asp:ScriptManagerProxy> 
<asp:Timer ID="Timer1" runat="server" Interval="5000" ontick="Timer1_Tick"> 
    </asp:Timer>  
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
</Triggers> 
<ContentTemplate> 
<asp:Label ID="Label1" runat="server" Text=""></asp:Label> 
</ContentTemplate> 
</asp:UpdatePanel> 

C#代碼:

int min=0,sec=0; 
protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    if (sec == 55) 
    { 
     min = min + 1; 
     sec = 0; 
    } 
    else 
    { 
     sec = sec + 5; 
    } 
    Label1.Text = min.ToString() +":"+ sec.ToString(); 
    if(min==10&&sec==0) 
    { 
     Timer1.Enabled=false; 
     Label1.Text = "clock over!"; 
    } 

的頁面開始以0:5,不發生任何變化。請指出d代碼是否有錯誤!

回答

1

我敢打賭,它會是你的更新面板。爲了調試

  1. 嘗試沒有UPADTE面板在所有 - 它的工作原理則
  2. 把計時器在更新面板,忘了扳機

其實2點可以反正做 - 我不確定將它作爲回發觸發器的好處。它將與定時器做的一樣好裏面

然而

老實說,我不會這麼做。 Tick方法不會執行回發(儘管是部分),只是爲了讓計時器顯示正在進行。

有很多免費可用的組件可以純粹在客戶端運行,這將會提高很多(很多)的效率,例如,

JQuery Timer

編輯

其實我想我已經發現了這個問題。這是你如何記錄分鐘和秒。這些是在變量中,並會在每次回傳(計時器滴答)時重置。 Youu需要將它們存儲到可能會回傳的東西中,例如, ViewState

protected void Timer1_Tick(object sender, EventArgs e) { 

    ViewState["min"] //not int min 
    ViewState["sec"] //not int sec 

    //.. you would need to use Convert (or Int32.Parse) to get 
    //.. then as an int to work with 

} 

但是,如果你還沒有做到這一點。使用JQuery組件或類似的

+0

嘿,謝謝你的建議。我現在使用了一個JavaScript函數,但唯一的問題是我想觸發一個c#函數,當計時器的值是10:00,我不想提交值的形式,因爲我想2重定向到同一頁面。關於這個的任何想法? – 2012-01-08 12:56:22

+0

@YashUpadhyay您需要從JavaScript/JQuery觸發一個asp.net服務器端事件。鏈接http://stackoverflow.com/questions/8771097/raise-server-side-button-click-event-from-javascript-in-ajax-call/8771155#8771155給出了一個非常好的解釋如何做到這一點(不是我的回答 - 其他人) – 2012-01-08 13:17:47