脚本管理器注册启动脚本仅在初始页面加载时运行脚本通过母版页功能运行时

时间:2016-09-27 15:35:24

标签: asp.net vb.net scriptmanager registerstartupscript

编辑:

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

原始问题

我有一个多页面应用程序,我在每个页面上多次使用ScriptManager的RegisterStartupScript方法。我们有一个Master页面,所以我决定放一个Public函数,它只取名字和可选的不同脚本文本并在那里注册启动脚本,这样我们就可以对启动脚本进行更小,更简单的函数调用,并且可以访问从使用母版页的每个页面。这是功能:

.bash_logout

我在母版页的aspx中也有脚本管理器,并且在使用此函数时它可以工作并运行脚本,但仅用于初始页面加载。任何后续的异步回发都不会运行任何已经运行过的脚本。

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

如果我使用这个确切的功能代码并将其放在特定页面后面的代码中,它可以正常工作并将在任何回发上运行。当函数归主页所有时,为什么这不能正常工作?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您说I have the script manager in the aspx of the master page as well - as wel是否意味着您在内容页面中拥有它?每MSDN

  

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

虽然这并没有解答为什么你的方法不起作用,但我认为你应该考虑在内容页面上使用proxy对象。

修改

根据您的评论,您还应该考虑访问内容页面上的脚本管理器,而不是通过公开您自己的属性,而是通过ScriptManager's GetCurrent method

我很好奇,如果这样做可以提供任何改进:

    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.RunStartupScript(ScriptManager.GetCurrent(...), "SomePredefinedJavaScriptFunction")

答案 1 :(得分:0)

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

    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

感谢您的其他答案和评论。看着那些帮助我回过头来回溯我的步骤以找到问题。