Я создал новый проект ASP.NET Web Forms через Visual Studio 2012. К сожалению, файл Site.Master по умолчанию очень запутан. (Я отправляю эти вопросы вместе, потому что они очень связаны и содержат ссылки на один и тот же код.)
Во-первых, я уже понимаю цель связывания и минимизации, поэтому нет необходимости обсуждать это. Однако я не понимаю, что происходит с тем, как скрипты включаются в главную страницу по умолчанию.
Вопрос 1:
Почему в файле BundleConfig.cs создается пакет "~/bundles/WebFormsJs", и все же на главной странице каждый из этих же отдельных .js файлов отображается один за другим в ScriptManager?
Внутри 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"));
Inside 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. Я даже не вижу ссылки на пакет "WebFormsJs", который был создан где-то вне BundleConfig.cs. Почему этот пакет когда-либо создавался, если каждый из этих файлов javascript будет упоминаться отдельно здесь в ScriptManager?
Вопрос 2:
Почему ScriptManager используется таким образом вообще? Я был под впечатлением, что ScriptManager был необходим для Microsoft Ajax, например, с помощью UpdatePanels. Какова цель использования ScriptManager здесь... просто для регистрации файлов javascript?
Вопрос 3:
В чем разница в регистрации файлов javascript с помощью ScriptManager в сравнении с вверху сайта Site.Master, где вместо этого используется следующий подход?
<%: Scripts.Render("~/bundles/modernizr") %>
Вопрос 4:
Внутри ScriptManager я также заметил:
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
... Я могу хотя бы распознать "MsAjaxBundle" из BundleConfig.cs, но где определены 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" />
Но я не понимаю, что здесь происходит. Я думал, что package.config используется для NuGet. Плюс... Я даже не вижу путь, указанный здесь для расположения этих jQuery.js файлов. Они перечислены здесь и странно связаны с определенной версией .NET Framework (4.5 в моем случае). Почему ресурс javascript будет связан с версией .NET Framework вне меня.
В любом случае вопрос 4 таков: как добавляется/используется ресурс "jquery" в ScriptManager? Почему я не вижу файлы jQuery.js, сгруппированные вместе в BundleConfig.cs, как и все остальные пакеты?
Вопрос 5:
Можно ли удалить следующую ссылку script из Site.Master, если я не планирую использовать UpdatePanel и те элементы управления Microsoft Ajax? Я немного смущен, почему это по-прежнему включено здесь по умолчанию.
<asp:ScriptReference Name="MsAjaxBundle" />