Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Masterpage.PageLoad()中的RegisterStartupScript将不会在ContentPlaceHolder中的异步回发上运行_Javascript_Asp.net_Ajax_Master Pages_Scriptmanager - Fatal编程技术网

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

Javascript Masterpage.PageLoad()中的RegisterStartupScript将不会在ContentPlaceHolder中的异步回发上运行,javascript,asp.net,ajax,master-pages,scriptmanager,Javascript,Asp.net,Ajax,Master Pages,Scriptmanager,在使用多个不同的关键字在线搜索后,我一直无法找到问题的解决方案 我开始寻找一种方法,弹出一条消息,要求用户在会话取消前一分钟续订会话。我决定使用的解决方案是在母版页中运行javascript计时器,并在母版页上调用它。这样,每当我的用户从一页导航到另一页时,他们都会重置计时器。但是,由于用户将使用的许多页面都具有UpdatePanel并异步更新,因此我正在使用的函数正在访问,但被跳过(根据调试器) 我使用的功能是: ScriptManager.RegisterStartupScript(main

在使用多个不同的关键字在线搜索后,我一直无法找到问题的解决方案

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

我使用的功能是:

ScriptManager.RegisterStartupScript(main, this.GetType(), "callTimer", "callTimer();", true);
此函数在常规回发或母版页上的异步回发(我通过在母版页中的updatepanel上回发来更新计时器)上运行良好,但在异步回发时将跳过此函数

我尝试了一些方法,在母版页中控制函数页或UpdatePanel,在子版页中控制UpdatePanel。我也尝试过将此代码放在childpages中,但尽管这些更改确实重置了计时器,但它会导致javascriptcode运行多次,并且它们会争夺显示倒计时的标签

我在这里真是不知所措。我认为一个可能的解决方案是更改startupscript的控制,并在再次运行该代码之前终止所有运行的Javascript。然而,以编程方式搜索终止、取消或停止javascript函数的方法也不会产生有用的结果


另一个我可以接受的解决方案是在鼠标移动时重置计时器,但由于我是为IE8设计的,除非窗口不对焦,否则这将无法工作。

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

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

我找到了这个问题的解决方案:我可以通过将当前的date.time作为一个数字发送到javascript函数来解决这个问题。从那里我将倒计时标签的值设置为date.time。在计时器中,如果我发现标签的date.time与函数开始的日期不匹配,它将返回并结束函数。这意味着在任何给定时间,只有函数的最新实例将保持运行。

首先,非常感谢您的回答。第二,通过ScriptManager注入脚本与我正在做的相比意味着什么?我仍然在把它转换成C代码,所以我还没有测试它,但我想了解我正在添加的代码,而谷歌没有给我提供答案。好的,我已经把它转换成C代码了。但是,它会导致与我前面概述的相同的问题(在asyncpostback上,它会导致javascript运行两次,因此当两个函数同时尝试更改它时,计时器标签会闪烁。字符限制不允许我发布代码。因此,这对我不起作用。它产生了相同的问题。但是,我能够通过将当前日期.time作为数字发送到javascript f来解决此问题函数。从那里,我将倒计时标签的值设置为date.time。在计时器中,如果我发现标签的date.time与函数开始的日期.time不匹配,它将返回并结束函数。这意味着在任何给定时间,只有函数的最新实例将保持运行。我找到了一个解决方案问题:我可以通过将当前的date.time作为一个数字发送到javascript函数来解决这个问题。从那里我将倒计时标签的值设置为date.time。在我的计时器中,如果我发现标签的date.time与函数开始时的日期.time不匹配,它将返回并结束函数。这意味着t确保在任何给定时间只有函数的最新实例保持运行。