Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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
Asp.net 脚本管理器注册启动脚本仅在通过母版页函数运行时在初始页面加载时运行脚本 编辑:_Asp.net_Vb.net_Scriptmanager_Registerstartupscript - Fatal编程技术网

Asp.net 脚本管理器注册启动脚本仅在通过母版页函数运行时在初始页面加载时运行脚本 编辑:

Asp.net 脚本管理器注册启动脚本仅在通过母版页函数运行时在初始页面加载时运行脚本 编辑:,asp.net,vb.net,scriptmanager,registerstartupscript,Asp.net,Vb.net,Scriptmanager,Registerstartupscript,我通过开发人员工具检查了页面,他们都在脚本块中放置了一个包含函数调用的脚本块。在母版页中运行的脚本将脚本块放在页面的更高位置,即表单顶部的几行。从页面调用的脚本块将它们与其他脚本块放在表单元素末尾附近。我不确定这对任何人是否意味着什么,但它似乎与我有关 原始问题 我有一个多页应用程序,其中我在每个页面上多次使用ScriptManager的RegisterStartupScript方法。我们有一个母版页,所以我决定放置一个公共函数,它只需要名称和可选的不同脚本文本,并在那里注册启动脚本,这样我们

我通过开发人员工具检查了页面,他们都在脚本块中放置了一个包含函数调用的脚本块。在母版页中运行的脚本将脚本块放在页面的更高位置,即表单顶部的几行。从页面调用的脚本块将它们与其他脚本块放在表单元素末尾附近。我不确定这对任何人是否意味着什么,但它似乎与我有关


原始问题 我有一个多页应用程序,其中我在每个页面上多次使用ScriptManager的RegisterStartupScript方法。我们有一个母版页,所以我决定放置一个公共函数,它只需要名称和可选的不同脚本文本,并在那里注册启动脚本,这样我们就可以对启动脚本进行更小、更简单的函数调用,并且可以从使用母版页的每个页面访问该函数调用。下面是函数:

Public Sub RunStartupScript( ByVal name As String, ByVal Optional script As String = "")
    If script = "" Then
        script = name & "();"
    End If
    ScriptManager.RegisterStartupScript(Me, [GetType](), name, script, True)
End Sub
我在母版页的aspx中也有脚本管理器,当使用此函数时,它会工作并运行脚本,但仅用于初始页面加载。任何后续异步回发都不会运行任何已运行的脚本

Master.RunStartupScript("SomePredefinedJavaScriptFunction")
如果我把这个函数代码放在特定页面的代码后面,它就可以正常工作,并且可以在任何回发中运行。当功能属于母版页时,为什么不能正常工作


有什么想法吗?

你说
我在母版页的aspx中也有脚本管理器
-这
是否也意味着你在内容页中有脚本管理器?

将ScriptManager控件与母版页、用户控件和其他子组件一起使用 页面在其层次结构中只能包含一个ScriptManager控件。若要在父页已具有ScriptManager控件时为嵌套页、用户控件或组件注册服务和脚本,请使用ScriptManagerProxy控件。有关详细信息,请参阅将ASP.NET UpdatePanel控件与母版页一起使用

虽然这并不能回答为什么你的方法不起作用,但我认为你应该考虑在内容页上使用<代码>代理>代码>对象。< /P> 编辑

基于您的注释,您还应该考虑在内容页上访问脚本管理器,而不是通过暴露您自己的属性,而是通过

我很好奇这样做是否能带来任何改善:

    Public Sub RunStartupScript(System.Web.UI.ScriptManager sm, ByVal name As String, ByVal Optional script As String = "")
        If script = "" Then
            script = name & "();"
        End If
        sm.RegisterStartupScript(Page, Page.GetType(), name, script, True)
    End Sub

然后调用
Master.runstartscript(ScriptManager.GetCurrent(…),“SomePredefinedJavaScriptFunction”)
你说
我在母版页的aspx中也有脚本管理器
-这是否意味着你在内容页中也有脚本管理器?

将ScriptManager控件与母版页、用户控件和其他子组件一起使用 页面在其层次结构中只能包含一个ScriptManager控件。若要在父页已具有ScriptManager控件时为嵌套页、用户控件或组件注册服务和脚本,请使用ScriptManagerProxy控件。有关详细信息,请参阅将ASP.NET UpdatePanel控件与母版页一起使用

虽然这并不能回答为什么你的方法不起作用,但我认为你应该考虑在内容页上使用<代码>代理>代码>对象。< /P> 编辑

基于您的注释,您还应该考虑在内容页上访问脚本管理器,而不是通过暴露您自己的属性,而是通过

我很好奇这样做是否能带来任何改善:

    Public Sub RunStartupScript(System.Web.UI.ScriptManager sm, ByVal name As String, ByVal Optional script As String = "")
        If script = "" Then
            script = name & "();"
        End If
        sm.RegisterStartupScript(Page, Page.GetType(), name, script, True)
    End Sub

然后调用
Master.runstartscript(ScriptManager.GetCurrent(…),“SomePredefinedJavaScriptFunction”)

,结果发现这是一个非常简单的错误(就像这些事情经常发生的那样),但很难看出。我忘记了我没有引用母版页文件中的页面,而是引用母版类型。将Me页更改为已修复此问题

    Public Sub RunStartupScript( ByVal name As String, ByVal Optional script As String = "")
        If script = "" Then
            script = name & "();"
        End If
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), name, script, True)
    End Sub

谢谢你的回答和评论。查看这些帮助我回顾并追溯我的步骤以找到问题。

因此,结果证明这是一个非常简单的错误(这些事情经常发生),但很难看出。我忘记了我没有引用母版页文件中的页面,而是引用母版类型。将Me页更改为已修复此问题

    Public Sub RunStartupScript( ByVal name As String, ByVal Optional script As String = "")
        If script = "" Then
            script = name & "();"
        End If
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), name, script, True)
    End Sub

谢谢你的回答和评论。查看这些帮助我回顾并追溯我的步骤以找到问题。

一个粗略的猜测,你能试试
RegisterScriptBlock
@techspider吗?我刚刚尝试过使用它。不过运气不好。你能试试
RegisterScriptBlock
@techspider吗?我刚刚试过用它。不过运气不好。对不起,我想应该用更好的措辞。不,我在内容页上没有脚本管理器。我还没有对代理对象做过任何研究,但肯定会在其他方面进行研究,所以很高兴知道这一点。我目前在母版页上只有一个公共只读属性,它返回我的脚本管理器实例。我在调用“RegisterAsyncPostbackControl”之类的东西时使用它,效果很好。更多好信息!那么,代理类到底是用来做什么的呢?我查看了上面的MSDN页面,但我不明白应该如何使用它…
ScriptManagerProxy
如果您想装饰性地注册脚本/服务,它将提供帮助。也许不适用于你的情况。对不起,我想应该用更好的措辞。不,我在内容页上没有脚本管理器。我还没有对代理对象做过任何研究,但肯定会在其他方面进行研究,所以很高兴知道这一点。我目前在母版页上只有一个公共只读属性,它返回我的脚本管理器实例。我在调用“RegisterAsyncPostbackControl”之类的东西时使用它,效果很好。更多好信息!那么代理类到底是什么呢
    Public Sub RunStartupScript( ByVal name As String, ByVal Optional script As String = "")
        If script = "" Then
            script = name & "();"
        End If
        ScriptManager.RegisterStartupScript(Page, Page.GetType(), name, script, True)
    End Sub