8

バックグラウンド

マスターページ内には、ScriptManager次のような があります

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="False" EnableScriptLocalization="true">
    <Scripts>
        <asp:ScriptReference Path="~/js/master.js" />
        <asp:ScriptReference Path="~/js/jquery-min.js" />
    </Scripts>
</asp:ScriptManager>

次のようにして、ページ上のネストされたコントロールに追加のスクリプトを登録しています

protected override void OnPreRender(EventArgs e)
{
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "jquery-ui", "~/js/jquery-ui.js");
    base.OnPreRender(e);
}

期待される

  1. master.js
  2. jquery-min.js
  3. jquery-ui.js *

実際

  1. jquery-ui.js *
  2. master.js
  3. jquery-min.js

質問

登録されたスクリプトが読み込まれる順序を変更する方法はありますか?

- また -

少なくとも、実際のScriptManagerブロックに登録されているスクリプトがコード ビハインド登録済みスクリプトの前に登録されていることを確認することは可能ですか?

4

2 に答える 2

5

ソースコードを少し掘り下げた後、ScriptManager2 つの有用な観察結果を得ることができます。

  • マネージャーに追加されたスクリプトは、コレクションに表示される順序でページに 1 つずつ登録されますScriptManager.Scripts(興味がある場合は、 method やそのようなものClientScript.RegisterClientScriptBlockではなく、 method を介して)。Render

  • マークアップで宣言されたスクリプトは、オブジェクトの作成ScriptManager.Scripts時にコレクションに追加されます。ScriptManager

したがって、

実際の ScriptManager ブロックに登録されているスクリプトが、コード ビハインド登録済みスクリプトの前に登録されていることを確認します。

クラスScriptManager.Scriptsの静的ユーティリティメソッドを使用する代わりに、コントロール内のスクリプトをコレクションに直接追加することです。ScriptManagerコントロールのコード サンプルは次のとおりです。

protected override void OnPreRender(EventArgs e)
{
    ScriptManager currentScriptManager = ScriptManager.GetCurrent(this.Page);
    if (currentScriptManager != null)
    {
        ScriptReference scriptRef = new ScriptReference("~/js/jquery-ui.js");
        currentScriptManager.Scripts.Add(scriptRef);
    }
    else
    {
        this.Page.ClientScript.RegisterClientScriptInclude(
            this.GetType(), "jquery-ui", "js/jquery-ui.js");
    }

    base.OnPreRender(e);
}

1 つの小さなメモ - コード サンプルに見られるようScriptManagerに、ページにない場合は大文字と小文字を区別することをお勧めします。

于 2012-06-21T09:22:40.870 に答える