2011-10-20 32 views
0

我有這樣的AJAX更新面板,將信息傳遞給JavaScript

var leave =<%=seconds %>; 
CounterTimer(); 
var interv=setInterval("CounterTimer()",1000); 
function CounterTimer() { 
try { 
    if (leave>0) 
    { 
     var day = Math.floor(leave/(60 * 60 * 24)) 
     var hour = Math.floor(leave/3600) - (day * 24) 
     var minute = Math.floor(leave/60) - (day * 24 *60) - (hour * 60) 
     var second = Math.floor(leave) - (day * 24 *60*60) - (hour * 60 * 60) - (minute*60) 
     hour=hour<10 ? "0" + hour : hour; 
     minute=minute<10 ? "0" + minute : minute; 
     second=second<10 ? "0" + second : second; 
     var remain=day + " days "+hour + ":"+minute+":"+second; 
     leave = leave - 1; 
     document.getElementById("<%=lblRemain.ClientID %>").innerText=remain; 
    } 
    else 
    { 
     try{ 
      document.getElementById("<%=lblRemain.ClientID %>").innerText="Auction closed";} 
      catch(err) { //alert(err.Message); 
      } 
    } 
    } 
    catch(err) 
    { alert(err.Message);} 

}

一個倒數計時和我設置/把假變量的值從C#

seconds = (ClosingOn - DateTime.Now).TotalSeconds; 

在網頁上我有一個顯示拍賣信息的UpdatePanel,這個UpdatePanel每5秒更新一次。 在倒計時,我想能夠改變剩餘時間的計時器事件

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    ClosingOn.AddMinutes(5); 
    seconds = (ClosingOn - DateTime.Now).TotalSeconds; 
} 

但這種變化並不影響假變量在JavaScript :(

你能看到的方式出來的呢?

我在一個非常緩慢的INTERENT連接有這麼一個更新的UpdatePanel每秒不是一個選項。

回答

0

這是因爲這種表達var leave =<%=seconds %>;只計算一次,在實際工作y在頁面呈現。 代替使用<%= seconds%>表達式計算離開值,將HiddenField添加到放置Timer控件的UpdatePanel中。在JavaScript中,您可以獲取該字段的值並將其解析爲int。在Timer1_Tick中,您可以在該隱藏字段上分配新值。

或者,如果你想快速的解決方法,你可以在Timer1_Tick方法的末尾添加以下代碼:

ScriptManager.RegisterStartupScript(Timer1, typeof(Timer), Guid.NewGuid().ToString(), string.Format("leave = {0}", seconds), true); 
+0

謝謝 - 我已經被周圍的隱藏字段,但使用的RegisterHiddenField(」 - 這不是好(在這種情況下) – ThorOstergaard