1

当页面最初呈现时,该initializeControl函数被调用并且一切正常。

当页面执行完整的回发(通过提交按钮)时,该initializeControl函数也被调用并且一切正常。

但是,当有 的部分回发时UpdatePanel,永远不会调用该initializeControl函数并且控件停止工作。

HTML:

<asp:ScriptManager ID="myScriptManager" runat="server" />
<asp:UpdatePanel ID="myUpdatePanel" runat="server">
    <ContentTemplate>
        <uc:MyControl ID="myControl" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

用户控制:

Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
    Dim initializeScript = String.Format("initializeControl('{0}');", ClientID)

    Page.ClientScript.RegisterStartupScript(GetType(Page),
        New Guid().ToString(), initializeScript, True)

    MyBase.Render(writer)
End Sub

出于测试目的,假设initializeControl函数只是一个debugger;(函数的内容工作正常 - 它只是在需要时不被调用)。

请记住,用户控件无法(据我所知)知道它是否在内部UpdatePanel,并且它也无法访问ScriptManager服务器代码中父页面上的元素。

提前致谢。

PS 我知道UpdatePanels 很糟糕,应该不惜一切代价避免,但我正在处理数百个已经在使用它们并且无法更改的消费页面。

4

1 回答 1

2

这很可能是因为页面更新是通过更新面板进行的。在这些情况下,启动脚本可能会出现无法触发的问题,并且需要包含在:

Sys.Application.add_load(function(){ myFunctionCall(); });

这是 Microsoft AJAX 库确保启动脚本在 MS AJAX 往返期间发生的方式。

这是一种确保添加到页面的所有客户端脚本都能正常工作的简单方法,无论它们是否包含在 ajax 更新面板中。我们在所有项目中都使用它,它完美无缺:

ASP.Net - AJAX UpdatePanel 中的 Javascript

于 2012-10-16T15:22:04.657 回答