2009-08-07 67 views
0

我正在开发使用asp.net在线考试申请,在开始考试页面我创建了一个JavaScript的倒数计时器,我怎么能移动到下一个页面automaticaly后计时器达到00,这里是我的代码JavaScript的定时器

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()); 
} 

thanx提前 桑吉塔

回答

0

这听起来当你点击“下一步”按钮,加载一个全新的页面等。这当然会改变所有的内容并重置所有的javascript。没有一点工作,你无法在页面之间保持状态。

对此的解决方案可能是当按下下一个按钮时保存定时器状态,并将其传递到下一个阶段。您可以通过将计时器状态保存到隐藏表单输入并将其与“下一步”按钮一起提交来完成此操作。

另一种选择是通过AJAX加载你的问题。每次点击下一个按钮时,您都可以简单地用新的问题来替换页面的问题部分,而不必保留定时器。这可能是我会使用的解决方案。

0

当您点击下一个按钮时是否重新加载整个页面?这可能会导致java脚本文件realod。所以变量值将重置。可能您可以考虑通过Ajax显示问题/答案。显示下一个问题时无需重新加载整个页面。当您显示该部分时测验只会被更新。所以你也可以在你的java脚本中维护全局变量。查看下面的链接,了解使用jQuery进行部分页面更新。

http://www.west-wind.com/presentations/jquery/jquerypart2.aspx

希望这有助于。

0

如果你不能摆脱回发,你可以把计时器放在iframe中。

0

您需要一种方法来在页面之间持久保存信息,并且实际上只有一种可能性:使其成为下一页请求的一部分。

现在,这可以被细分为两类:

1)作为URL的一部分:http://www.example.com/page?timer=123;

2)作为标题的一部分;

和号码2打开了新的可能性:

一个)作为POST数据的一部分;

b)仅作为客户端cookie;

c)作为与服务器上的信息绑定的cookie;

编号1,2a和2b可以由用户操纵。因此,您可以做的是在cookie中存储一些值,例如散列值或数据库行ID,您将使用该值来获取服务器上的信息。

tl; dr?使用一个asp“会话对象”。它可以让你保持在服务器端的东西,用户将不知道他们是什么。