1

標準のインターネット テンプレートを使用した ASP.NET 4.5 Webform プロジェクトがあります。Site.Master に含まれるもの:

<ajaxToolkit:ToolkitScriptManager runat="server">
    <Scripts>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="jquery" />   <!-- ??? -->
        <asp:ScriptReference Name="jquery.ui.combined" />  <!-- ?? -->
        <asp:ScriptReference Name="WebForms.js" Path="~/Scripts/WebForms/WebForms.js" />
        ...

上記の 2 つの jquery 行により、html ドキュメントに次のものが生成されるようです。

<script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
<script src="Scripts/jquery-ui-1.8.20.js" type="text/javascript"></script>

ASP.NET がこれら 2 つのファイルへのリンクをどのように/どこで認識するかを教えてください。

--

7 月 30 日の更新:

jQuery スクリプトが 4.5 Web フォーム アプリケーションにどのように登録されるかを説明しているthisを見つけました。コード サンプルは、選択したバージョンの jQuery スクリプトがどのようにリンクされているかを正確に示しています。Application_Start のPreApplicationStart前に実行されるメソッドで実行されることが示されています。プロジェクト全体で「PreApplicationStart」を検索しましたが、何も見つかりませんでした。これがどこにあるか知っている人はいますか?

4

1 に答える 1

1

.Net Framework 4.0 以降の ScriptManager では、スクリプト マッピング機能がサポートされています。そのため、任意の名前 (独自のスクリプトであっても) をスクリプト パスに登録 (関連付け) できます。主な利点は、デバッグ、リリース構成に使用するスクリプトを指定できることです。スクリプトの CDN の場所を指定することもできます。ScriptManager は、実行時に現在の構成に対して正しいものを選択します。

基本的にスクリプト マッピングは、次の例のようにアプリケーションの開始時に登録されます。

void Application_Start(object sender, EventArgs e) {
    // map a simple name to a path
    ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition {
        Path = "~/scripts/jquery-1.7.1.min.js",
        DebugPath = "~/scripts/jquery-1.7.1.js",
        CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.7.1.min.js",
        CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.7.1.js"
    });
}

編集: ASP.NET 4 では、構成なしで appdomain の早い段階でコードを実行するためにアセンブリが使用できる PreApplicationStart メソッドの概念が追加されました。そのため、nuget を介してテンプレートにデフォルトで追加される AspNet.ScriptManager.jQuery および AspNet.ScriptManager.jQueryUI ライブラリによって登録マッピングが追加されます。

基本的に、このライブラリは次の例のように 1 つのクラスで構成されます。

[EditorBrowsable(EditorBrowsableState.Never)]
public static class PreApplicationStartCode
{
  public static void Start()
  {
     string str = "2.0.3";
     ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition()
     {
       Path = "~/Scripts/jquery-" + str + ".min.js",
       DebugPath = "~/Scripts/jquery-" + str + ".js",
       CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + str + ".min.js",
       CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + str + ".js",
       CdnSupportsSecureConnection = true,
       LoadSuccessExpression = "window.jQuery"
     });
  }
}
于 2013-07-25T05:53:05.980 に答える