我正在尝试为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值以及其他方式并使用它,我真的很感激帮助!
答案 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);