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関数が単なる aであると仮定しますdebugger;(関数の内容は正常に機能します - 必要なときに呼び出されていないだけです)。

ユーザーコントロールが の中にあるかどうかを知る方法はなく (私が知っている) 、サーバーコードで親ページUpdatePanelの要素にアクセスする方法もないことに注意してください。ScriptManager

前もって感謝します。

PS私はUpdatePanelsがひどいので、絶対に避けるべきであることを知っていますが、すでにそれらを使用している何百もの消費ページで作業しており、それらを変更することはできません.

4

1 に答える 1

2

ページの更新が更新パネルを介して行われていることが原因である可能性が最も高いです。このような場合、起動スクリプトは起動しないという問題が発生する可能性があるため、次のようにラップする必要があります。

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

これは、MS AJAX ラウンドトリップ中に起動スクリプトが発生する必要があるときに、起動スクリプトが確実に実行されるようにする Microsoft AJAX ライブラリの方法です。

ajax updatepanel に含まれているかどうかに関係なく、ページに追加されたすべてのクライアント スクリプトが機能することを確認する簡単な方法を次に示します。これをすべてのプロジェクトで使用しており、問題なく動作します。

ASP.Net - AJAX UpdatePanel 内の Javascript

于 2012-10-16T15:22:04.657 に答える