我正在使用asp.net开发在线考试应用程序,在开始考试页面我创建了一个javascript倒计时器,如何在计时器达到00后自动移动到下一页,这里是我的代码
long timerStartValue = 1000;
private int TimerInterval
{
get
{
int o =(int) ViewState["timerInterval"];
if(o==0)
{
return (o);
}
return 50 ;
}
set
{
ViewState["timerInterval"] = value;
}
}
protected void Page_PreInit(object sender,EventArgs e)
{
string timerVal = Request.Form["timerData"];
if(! String.IsNullOrEmpty(timerVal))
{
timerVal = timerVal.Replace(",", String.Empty) ;
this.timerStartValue = long.Parse(timerVal);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if(! IsPostBack)
{
this.timerStartValue = 10000; //3599000;//14400000;
this.TimerInterval = 500;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.timerStartValue = 3599000;
}
protected void Page_PreRender(object sender, EventArgs e)
{
System.Text.StringBuilder bldr=new System.Text.StringBuilder();
bldr.AppendFormat("var Timer = new myTimer({0},{1},'{2}','timerData');", this.timerStartValue, this.TimerInterval, this.lblTimerCount.ClientID);
bldr.Append("Timer.go()");
ClientScript.RegisterStartupScript(this.GetType(), "TimerScript", bldr.ToString(), true);
ClientScript.RegisterHiddenField("timerData", timerStartValue.ToString());
}
提前 桑吉塔
答案 0 :(得分:0)
听起来就像点击“下一步”按钮,您正在加载一个全新的页面。这当然会改变所有内容并重置所有的javascript。如果没有一点工作,就无法跨页维护状态。
解决方法可能是在按下下一个按钮时保存计时器状态,并将其传递给下一个阶段。您可以通过将计时器状态保存到隐藏表单输入并将其与“下一步”按钮一起提交来完成此操作。
另一种选择是通过AJAX加载你的问题。每次单击下一个按钮时,您都可以简单地用新问题替换页面的问题部分,并保持计时器不变,而不是移动到新页面。这可能是我将使用的解决方案。
答案 1 :(得分:0)
点击下一个按钮是否重新加载整个页面?这可能会导致java脚本文件的操作。因此变量值将重置。您可以考虑通过Ajax显示问题/答案。您在显示下一个问题时无需重新加载整个页面。当您显示时,该部分测验只会更新。所以你也可以在java脚本中维护全局变量。请查看以下链接,了解使用jQuery进行部分页面更新。
http://www.west-wind.com/presentations/jquery/jquerypart2.aspx
希望这有帮助。
答案 2 :(得分:0)
如果无法摆脱回发,可以将计时器放在iframe中。
答案 3 :(得分:0)
您需要一种在页面之间保留信息的方法,并且实际上只有一种可能性:使其成为下一页请求的一部分。
现在,这可以细分为两类:
1)作为网址的一部分:http://www.example.com/page?timer=123;
2)作为标题的一部分;
第2号开启了新的可能性:
a)作为POST数据的一部分;
b)仅作为客户端cookie;
c)作为与服务器上的信息相关的cookie;
用户可以操纵编号1,2a和2b。因此,您可以做的是在cookie中存储一些值,例如哈希值或数据库行ID,您将用它来获取服务器上的信息。
TL;博士?使用asp“Session对象”。它可以让你把东西放在服务器端,用户也不知道它们是什么。