包含母版页和多个子页的简单网站。
在page_load中,母版页面查找包含值的会话变量,如果在那里,则使用
Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + sessionTimeout + ");", true);
启动超时警报,效果很好。
在一个子页面上有一个服务器端按钮,可以有效地结束页面上的用户交互,并留下一条消息,说明如果你想做更多的事情,请再次登录"。单击此按钮时,我想清除会话变量(简单)并结束运行超时警告警报脚本(不那么容易)。
作为大师" page_load"事件在按钮处理程序之前触发,在页面重新加载时,它会重新启动超时脚本。当它点击按钮事件处理程序并清除会话变量时,由于脚本已经运行,所以为时已晚。
我尝试使用" registerclientscriptblock"注入即时的javascript来调用" clearTimeout()"我有客户端功能,但它似乎无法找到母版页上存在的功能和错误。
这似乎是一个经典的鸡肉和鸡蛋"情景,我看不到树木的木材。在我开车疯了之前,有人可以指出我在正确的方向吗?
编辑添加一些javascript代码:
目前主页功能" SessionExpireAlert" page_load代码引用的内容包括:
window.updateInterval = setInterval(function () {
seconds--;
document.getElementById("idleTime").innerHTML = convertTime(seconds);
document.getElementById("expireTime").innerHTML = convertTime(seconds);
}, 1000);
答案 0 :(得分:1)
RegisterStartupScript
会将脚本添加到正文的末尾,因此DOM在运行时就已准备就绪。只要您在此之后始终使用RegisterStartupScript
,脚本就会按照您创建的顺序添加和执行。
基本上,RegisterClientScriptBlock
很可能会将脚本放在之前添加RegisterStartupScript
的任何脚本。
答案 1 :(得分:0)
您是否考虑过将其放入Page_PreRender:
Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + sessionTimeout + ");", true);
首先进行适当的检查以确定是否有必要?