Javascript客户端& asp.net事件处理程序时间问题 - 如何解决?

时间:2015-11-05 12:57:07

标签: javascript asp.net master-pages

包含母版页和多个子页的简单网站。

在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);

2 个答案:

答案 0 :(得分:1)

RegisterStartupScript会将脚本添加到正文的末尾,因此DOM在运行时就已准备就绪。只要您在此之后始终使用RegisterStartupScript,脚本就会按照您创建的顺序添加和执行。

基本上,RegisterClientScriptBlock很可能会将脚本放在之前添加RegisterStartupScript的任何脚本。

答案 1 :(得分:0)

您是否考虑过将其放入Page_PreRender:

Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + sessionTimeout + ");", true);

首先进行适当的检查以确定是否有必要?