【问题标题】:Javascript client & asp.net event handler timing issues - how to solve?Javascript 客户端和 asp.net 事件处理程序计时问题 - 如何解决?
【发布时间】: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


【解决方案1】:

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

基本上,RegisterClientScriptBlock 最有可能将脚本放置在 任何使用 RegisterStartupScript 添加的脚本之前。

【讨论】:

    【解决方案2】:

    您是否考虑过将其放在 Page_PreRender 中:

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

    先进行适当的检查,看看是否有必要?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多