1

编辑:

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


原始问题

我有一个多页面应用程序,在该应用程序中,我在每个页面上多次使用 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")

如果我把这个确切的功能代码放在特定页面后面的代码中,它就可以正常工作并且可以在任何回发时运行。当该功能归母版页所有时,为什么这不能正常工作?

有什么想法吗?

4

2 回答 2

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 的GetCurrent方法

我很好奇这样做是否会带来任何改进:

    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")

于 2016-09-27T16:40:57.797 回答
0

所以事实证明这是一个非常简单的错误(就像这些事情经常发生的那样),但很难看到。我忘记了 Me 不是指母版页文件中的页面,而是指母版类型。将 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

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

于 2016-09-27T17:37:02.107 回答