从代码隐藏设置asp:HiddenField值并在javascript函数

时间:2015-06-22 18:00:10

标签: javascript c# jquery asp.net timer

我正在尝试为asp:Timer设置倒数计时器,这会在完成时刷新页面。我正在做的是在初始化时设置定时器间隔和隐藏值,然后使用隐藏字段的信息调用启动倒数计时器的javascript函数。

设置间隔,并设置隐藏字段值,但在尝试各种事情后,我得到的结果是一个问题,当javascript运行时,hiddenfield值未初始化。当我尝试直接在文档加载上调用函数时,它还没有初始化。

以下是我目前正在使用的代码。

代码隐藏

DateTime refreshTime;
protected void refreshHidden_Init(object sender, EventArgs e)
{
    refreshTime = DateTime.Now.AddSeconds(60);
    refreshHidden.Value = refreshTime.ToString();
    int timeToFresh = (int)(refreshTime - DateTime.Now).TotalMilliseconds;
    refreshTimer.Interval = timeToFresh;
    refreshTimerJS();
}

protected void refreshTimerJS()
{
    StringBuilder script = new StringBuilder();
    script.Append("<script type=\"text/javascript\">");
    script.Append("var dt='");
    script.Append(refreshTime.ToString());
    script.Append("';");
    script.Append("</script>");
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "DateVars", script.ToString());
}

页面

<div id="autopriseUpdate" class="content">
    <asp:Timer runat="server" ID="refreshTimer" Interval="600000" OnTick="refreshTimer_Tick"></asp:Timer>
    <asp:Label runat="server" ID="refreshLabel" Text="1m 0s"></asp:Label>
    <asp:HiddenField runat="server" ID="refreshHidden" OnInit="refreshHidden_Init"/>
</div>
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="js/jquery.countdown.min.js"></script>
<script type="text/javascript" src="js/refresh.js"></script>

的javascript

$(document).ready(function () {
    refreshJS();
});

function refreshJS(){
    var dt = new Date($('#refreshHidden').value);
    $('#refreshLabel').countdown(dt).on('update.countdown', function (event)
    {
        $(this).html(event.strftime('%M:%S'));
    });
}

隐藏字段值已设置且asp:Timer间隔倒计时并在点上刷新,但倒数计时器未启动。我最好的猜测是,我需要根据事情的顺序来修复,但我还没有线索。

我不能简单地对倒计时值进行硬编码,因为我要创建refreshTime变量,因此用户可以选择页面刷新之间的分钟数。

如果有人知道如何让我的javascript工作或如何从代码隐藏中获取DateTime值以及其他方式并使用它,我真的很感激帮助!

2 个答案:

答案 0 :(得分:4)

作为Mike答案的替代方案,您还可以将ClientIDMode设置为static,并且您的jQuery将按原样运行。 (假设您使用的是.NET 4.0或更高版本)

<asp:HiddenField runat="server" ClientIDMode="Static" ID="refreshHidden" OnInit="refreshHidden_Init"/>

答案 1 :(得分:3)

没有!

您的JavaScript无法使用以下方式访问该值:

var dt = new Date($('#refreshHidden').value);

在ASP.Net世界中它被称为refreshHidden,但是当呈现页面时,它将具有不同的名称。

以下是您的代码应该的样子:

var hiddenField = $("#<%= refreshHidden.ClientID %>").val();
var dt = new Date(hiddenField);