我创建了一个在线考试网站,我想实现ajax计时器。我已经编写了代码,但问题是我正在初始化一个会话,为计时器添加没有秒,假设10秒。当页面加载时,显示从6秒开始。所以我觉得当页面预渲染完成时,计时器已经开始,这就是为什么它从6秒而不是10秒显示
这是代码。如果任何身体可以建议如何从10秒显示将是伟大的。
aspx文件代码
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick">
</asp:Timer>
<asp:Label ID="Label1" runat="server" Text="Remaining Time :"></asp:Label> <asp:Label ID="lblTime" runat="server" Text=""></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
cs文件代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["time"] = DateTime.Now.AddSeconds(10);
}
}
protected void Timer1_Tick(object sender, EventArgs e)
{
if (lblTime.Text != "TimeOut!")
{
TimeSpan time1 = new TimeSpan();
time1 = (DateTime)Session["time"] - DateTime.Now;
if (time1.Seconds <= 0)
{
lblTime.Text = "TimeOut!";
ScriptManager.RegisterStartupScript(this, this.GetType(), "StartUpScript1", "alert('hello')", true);
}
else
{
lblTime.Text = time1.Hours.ToString("#00") + ":" + time1.Minutes.ToString("#00") + ":" + time1.Seconds.ToString("#00");
}
}
else
{
//Timer1.Interval = 0;
}
}
答案 0 :(得分:0)
然后在Session中存储值,它们保持不变
您的页面已加载,时间已设置。加载后,Timer将Ajax调用发送到Timer1_Tick
,并获得过时的时间。
您需要在Timer1_Tick
方法中移动时间设置的代码,如下所示:
protected void Timer1_Tick(object sender, EventArgs e)
{
if (Session["time"] == null)
Session["time"] = DateTime.Now.AddSeconds(10);
其他方法是使用javascript or jquery for countdown timers - 这将照常工作,但会删除页面回发到服务器。