ページが最初にレンダリングされると、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
関数が単なる aであると仮定しますdebugger;
(関数の内容は正常に機能します - 必要なときに呼び出されていないだけです)。
ユーザーコントロールが の中にあるかどうかを知る方法はなく (私が知っている) 、サーバーコードで親ページUpdatePanel
の要素にアクセスする方法もないことに注意してください。ScriptManager
前もって感謝します。
PS私はUpdatePanel
sがひどいので、絶対に避けるべきであることを知っていますが、すでにそれらを使用している何百もの消費ページで作業しており、それらを変更することはできません.