asp.net+js倒计时

Oooover 2013-05-15 08:19:01
本人在做一个在线考试系统,需要实现考试剩余时间倒计时显示。系统大概设计如下:当学生在考试课程选择页面中,选择了考试课程之后,使用Server.Transfer("StartExam.aspx?cousiid="+couseid),然后在StartExam.aspx获取到couseid,在根据couseid从数据库中取得考试时间time(秒数)等信息,再将分钟数:time/60 显示在<asp:Label ID="minute" runat="server" ></asp:Label> 将秒数:time%60 显示在<asp:Label ID="second" runat="server" ></asp:Label> 在通过JS控制ID="minute"和ID="second"两个标签的显示,这样能看到显示的值是在变化的,但是,在用户提交试卷时,我还想再次获得ID="minute"和ID="second"两个标签的值,却一直是得到他们的初始值,即得到的总是考试的总时间,明明在前台的显示值已经发生了变化,为什么还会这样???
JS代码:

function startTime() {
var obj2 = document.getElementById("minute");
var obj3 = document.getElementById("second");
var m = parseInt(obj2.innerHTML);
var s = parseInt(obj3.innerHTML);
var t = setInterval(function () {
m = parseInt(obj2.innerHTML);
s = parseInt(obj3.innerHTML);
s = s - 1;
if (s < 0) {
s = 59;
m = m - 1;
}
if (m < 0) {
m = 0;
}
if (m == 0 && s == 0) {
document.getElementById("submit1").click();
clearInterval(t);
}
if ((m % 5) == 0 && s == 0) {
autoSubmit();
}
if (m == 10 && s == 0) {
alert("离答题结束还有10分钟,请尽快完成题目!");
}
obj2.innerHTML = m;
obj3.innerHTML = s;
}, 1000);
}


protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request["couseid"] != null && Request["couseid"] != "")
{
//获取课程ID
int cid = Convert.ToInt32(Request["couseid"]);
ViewState["couseid"] = cid;
// couseid.Text = Convert.ToString(cid);
ViewState["ExamTime"] = DateTime.Now.ToString("G");
Bind(cid);
}
else
{

Response.Redirect("Exam.aspx");
}
//ajax实现自动保存
String submit = Request.QueryString["submit"];
if (submit != null && submit!="")
{
int timeremain = Convert.ToInt32(Request.QueryString["remaintime"]);
ViewState["timeremain"] = timeremain;
String SubmitState = "N";
AutoSave(SubmitState); //保存试卷结果
}else{
ViewState["timeremain"] = 0;
}
}

此外,自动保存也有点问题,请各位帮忙解决!先谢谢各位了!!
...全文
288 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
h0205213 2013-05-15
  • 打赏
  • 举报
回复
所以让你用hiddenfield控件啊 或者你加个runat="server" 汗...
Oooover 2013-05-15
  • 打赏
  • 举报
回复
我想在后台直接读取服务器控件的内容!
Oooover 2013-05-15
  • 打赏
  • 举报
回复
引用 8 楼 h0205213 的回复:
就是html的<input type="hidden"> 或者<input type="text" style="display:hidden;"/> 即隐藏的textbox
这样在后台不能直接读取input 的内容吧!!
h0205213 2013-05-15
  • 打赏
  • 举报
回复
就是html的<input type="hidden"> 或者<input type="text" style="display:hidden;"/> 即隐藏的textbox
Oooover 2013-05-15
  • 打赏
  • 举报
回复
引用 6 楼 h0205213 的回复:
4楼正解 你用js修改 Label 控件的值 后台是获取不到的 你可以同时把值放到一个hiddenfield中 后台取hiddenfield的值
hiddenfield没用过,能举个小例子吗?或给几行示例代码!谢谢!
h0205213 2013-05-15
  • 打赏
  • 举报
回复
4楼正解 你用js修改 Label 控件的值 后台是获取不到的 你可以同时把值放到一个hiddenfield中 后台取hiddenfield的值
Oooover 2013-05-15
  • 打赏
  • 举报
回复
引用 4 楼 liuchaolin 的回复:
你没有更新他们的ViewState,可能需要HF控件另作保存
我先是通过如下代码获取剩余时间的: int remaintime=int.Parse(minute.Text)*60+int.Parse(second.Text); 但是的得到值一直都是初始值,即考试的总时间,没有得到前台显示的值。
md5e 2013-05-15
  • 打赏
  • 举报
回复
你没有更新他们的ViewState,可能需要HF控件另作保存
Oooover 2013-05-15
  • 打赏
  • 举报
回复
前台显示是在变化的!
Oooover 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
js的倒计时有时并不是很准,看机器和浏览器,有些快,有些会慢
先别管这个,那为什么我的得到的ID="minute"和ID="second"两个标签的值没有变化??
md5e 2013-05-15
  • 打赏
  • 举报
回复
js的倒计时有时并不是很准,看机器和浏览器,有些快,有些会慢
blue_apple2006 2013-05-15
  • 打赏
  • 举报
回复
asp.net 使用viewstate来保存数据,等传到服务器的时候会读出来, 你脚本更新的是页面dom的值,即使页面看上去变了,但viewstate中的值没有变化,提交到服务器读出来的还是原来的值。 这个地方不要用服务器控件,最好用<input > 加个runat=server ,根据他的id取值就可以了。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧