AJAX更新面板,将信息传递给JavaScript

时间:2011-10-20 11:56:09

标签: c# asp.net ajax

我有像这样的倒数计时器

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#

的leave变量的值
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中的leave变量:(

你能看出一条出路吗?

我的互联网连接非常慢,因此每秒更新一次更新面板不是一种选择。

1 个答案:

答案 0 :(得分:0)

那是因为这个表达式var leave =<%=seconds %>;只评估了一次,实际上是在页面渲染上。 而不是使用&lt;%= seconds%&gt;评估休假值。表达式,将HiddenField添加到放置Timer控件的UpdatePanel中。在javascript中,您可以获取此字段的值并将其解析为int。在Timer1_Tick中,您可以在该隐藏字段上分配新值。

或者,如果您正在寻找快速解决方法,可以在代码后面的Timer1_Tick方法的末尾添加:

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