【发布时间】:2015-11-05 21:42:24
【问题描述】:
具有母版页和多个子页的简单网站。
在 page_load 中,母版页查找包含值的会话变量,如果存在,则使用
Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + sessionTimeout + ");", true);
这会启动超时警报,效果很好。
在一个子页面上有一个服务器端按钮,可以有效地结束页面上的用户交互并留下一条消息,说明“如果你想做更多的事情,请重新登录”。单击此按钮时,我想清除会话变量(简单)并结束正在运行的超时警告警报脚本(不是那么简单)。
由于主“page_load”事件在按钮处理程序之前触发,因此在页面重新加载时,它会重新启动超时脚本。当它点击按钮事件处理程序并清除会话变量时,为时已晚,因为脚本已经在运行。
我尝试使用“registerclientscriptblock”注入即时 javascript 来调用我拥有的“clearTimeout()”客户端函数,但它似乎无法找到母版页上存在的函数和错误.
这似乎是一个经典的“鸡和蛋”场景,我只见树木不见林。有人可以在我发疯之前给我指出正确的方向吗!?
编辑添加了一些javascript代码:
目前 page_load 代码引用的母版页函数“SessionExpireAlert”包含以下内容:
window.updateInterval = setInterval(function () {
seconds--;
document.getElementById("idleTime").innerHTML = convertTime(seconds);
document.getElementById("expireTime").innerHTML = convertTime(seconds);
}, 1000);
【问题讨论】:
-
网页应该能够访问由母版页注入的脚本创建的任何变量,所以应该是一个简单的例子,将
setTimeout的值赋给一个var然后清除它来自页面之后注入的脚本。 -
我知道应该,但事实并非如此!请参阅上面 OP 底部添加的代码。如果,在我的按钮事件中,我将 registerclientscriptblock 与“alert(window.updateInterval");”一起使用,那么警报框会弹出“未定义”,但如果我从母版页 javascript 执行此操作,它会显示“2”。跨度>
-
使用
RegisterStartupScript,与母版页中相同。您执行此操作的方式只是将脚本放在页面中您告诉它的任何位置,而启动脚本则按顺序放在正文的末尾。 -
好吧刷我,就这么简单!谢谢 - 建议作为答案,我会接受,谢谢!
-
这是一个有点抽象的概念,很难解释,但我已经尝试过了。很高兴它解决了你的问题:)
标签: javascript asp.net master-pages