从代码隐藏设置一个 asp:HiddenField 值并在 javascript 函数中访问

Set an asp:HiddenField value from codebehind and access in javascript function

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

设置了间隔,设置了隐藏字段值,但是在尝试了各种方法之后,我得到的结果是 javascript 运行时隐藏字段值未初始化的问题。当我尝试在文档加载时直接调用该函数时,它也未初始化。

这是我目前使用的代码。

代码隐藏

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 值并加以利用,我将非常感谢您的帮助!

没有!

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

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

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

您的代码应该如下所示:

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

作为迈克回答的替代方案,您还可以将 ClientIDMode 设置为静态,您的 jQuery 将按原样工作。 (假设您使用的是 .NET 4.0 或更高版本)

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