gpt4 book ai didi

javascript - Masterpage.PageLoad() 中的 RegisterStartupScript 将不会在 ContentPlaceHolder 中的异步回发上运行

转载 作者:行者123 更新时间:2023-11-30 06:36:57 26 4
gpt4 key购买 nike

在使用多个不同的关键字进行在线搜索后,我未能找到解决问题的方法。

我开始寻找一种方法来弹出一条消息,要求用户在 session 取消前一分钟更新他们的 session 。我决定使用的解决方案是在母版页中运行一个 javascript 计时器,并在 Masterpage.Page_Load() 上调用它。这样,每当我的用户从一个页面导航到另一个页面时,他们就会重置计时器。但是,由于用户将使用的许多页面都具有更新面板并且异步更新,所以我正在使用的功能正在被访问,但被跳过(根据调试器)。

我使用的函数是:

ScriptManager.RegisterStartupScript(main, this.GetType(), "callTimer", "callTimer();", true);

此函数在母版页上的常规回发或异步回发上运行良好(我通过在母版页的更新面板上执行回发来更新计时器),但是,将在异步回发时被跳过。

我已经尝试了一些东西,控制母版页中的功能页面或更新面板或子页面中的更新面板。我也尝试过将这段代码放在子页面中,但是虽然这些更改确实会重置计时器,但它会导致 javascriptcode 运行多次并且它们会争夺显示倒计时的标签。

我真的很茫然。我认为一个可能的解决方案是更改启动脚本的控制并再次终止在该代码之前运行的所有 javascript。然而,寻找一种以编程方式终止、取消或停止 javascript 函数的方法也没有产生任何有用的结果。

我可以接受的另一种解决方案是在鼠标移动时重置计时器,但由于我是为 IE8 设计的,除非窗口没有聚焦,否则这将不起作用。

最佳答案

在部分回发的情况下,您需要通过ScriptManager 注入(inject)脚本,否则不会重新执行。这是一个实用函数 (vb.net) 来为您处理注入(inject)逻辑:

Public Shared Sub InjectScript(ByVal containingPage As Page, ByVal scriptKey As String, ByVal scriptText As String)
Dim sManager = ScriptManager.GetCurrent(containingPage)

If sManager IsNot Nothing AndAlso sManager.IsInAsyncPostBack Then
//the page is being partially-posted back by an Ajax control (e.g. UpdatePanel)
ScriptManager.RegisterStartupScript(containingPage, GetType(Page), scriptKey, scriptText, True)
Else
//standard postback
containingPage.ClientScript.RegisterStartupScript(GetType(Page), scriptKey, scriptText, True)
End If
End Sub

关于javascript - Masterpage.PageLoad() 中的 RegisterStartupScript 将不会在 ContentPlaceHolder 中的异步回发上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13882483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com