Visual Studio2012を使用して新しいASP.NETWebフォームプロジェクトを作成しました。残念ながら、既定のSite.Masterファイルは非常にわかりにくいものです。(これらの質問は非常に関連があり、同じコードをかなり参照しているため、一緒に投稿しています。)
まず、バンドルとミニファイの目的をすでに理解しているので、それについて説明する必要はありません。ただし、スクリプトがデフォルトのマスターページに含まれている方法がどうなっているのかわかりません。
質問1:
BundleConfig.csファイルに「〜/ bundles / WebFormsJs」というバンドルが作成されているのに、マスターページでこれらの同じ個々の.jsファイルがScriptManagerに1つずつリストされているのはなぜですか。
BundleConfig.csの内部:
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
"~/Scripts/WebForms/WebForms.js",
"~/Scripts/WebForms/WebUIValidation.js",
"~/Scripts/WebForms/MenuStandards.js",
"~/Scripts/WebForms/Focus.js",
"~/Scripts/WebForms/GridView.js",
"~/Scripts/WebForms/DetailsView.js",
"~/Scripts/WebForms/TreeView.js",
"~/Scripts/WebForms/WebParts.js"));
Site.Masterの内部:
<body>
<form runat="server">
<asp:ScriptManager runat="server">
<Scripts>
<%--Framework Scripts--%>
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
<asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
<asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
<asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
<asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
<asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
<asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
<asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
<asp:ScriptReference Name="WebFormsBundle" />
<%--Site Scripts--%>
</Scripts>
</asp:ScriptManager>
ご覧のとおり、これらの同じ.jsファイルのそれぞれがScriptManagerに個別にリストされています。BundleConfig.csの外部で作成された「WebFormsJs」バンドルへの参照すら表示されません。これらのJavaScriptファイルのそれぞれがここScriptManagerで個別に参照される場合、なぜそのバンドルが作成されたのですか?
質問2:
なぜScriptManagerがこのように使用されているのですか?UpdatePanelsの使用など、MicrosoftのバージョンのAjaxにはScriptManagerが必要であるという印象を受けました。ここでScriptManagerを使用する目的は何ですか...JavaScriptファイルを登録するだけですか?
質問3:
ScriptManagerを介してjavascriptファイルを登録する場合と、代わりに次のアプローチを使用するSite.Masterの上部に登録する場合の違いは何ですか?
<%: Scripts.Render("~/bundles/modernizr") %>
質問4:
ScriptManagerの内部でも、次のことに気づきました。
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
...少なくともBundleConfig.csから「MsAjaxBundle」を認識できますが、jqueryとjquery.ui.combinedはどこで定義されていますか?検索を行ったところ、packages.configでそれらへの参照が見つかりました。
<package id="jQuery" version="1.7.1.1" targetFramework="net45" />
<package id="jQuery.UI.Combined" version="1.8.20.1" targetFramework="net45" />
しかし、ここでも何が起こっているのかわかりません。NuGetにはpackages.configが使用されていると思いました。さらに...これらのjQuery.jsファイルの場所のパスがここにリストされていません。それらはここにリストされており、奇妙なことに.NET Frameworkの特定のバージョン(私の場合は4.5)に関連付けられています。javascriptリソースが.NETFrameworkのバージョンに関連付けられる理由は私にはわかりません。
とにかく、質問4はこれです:ScriptManagerのリソース「jquery」はどのように追加/使用されていますか?jQuery .jsファイルが他のすべてのバンドルと同じようにBundleConfig.csにバンドルされていないのはなぜですか?
質問5:
UpdatePanelやそのような種類のMicrosoft Ajaxコントロールを使用する予定がない場合、Site.Masterから次のスクリプト参照を削除できますか?これがデフォルトでここに含まれている理由について、私は少し混乱しています。
<asp:ScriptReference Name="MsAjaxBundle" />