Подтвердить что ты не робот

VS2012 - Веб-формы - путаница пула

Я создал новый проект 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" />
4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Это новое сообщение в блоге, которое также говорит об этом подробнее: статья ASP.NET

В основном webforms + bundling выглядит так из-за кучи унаследованного поведения, которое мы не смогли изменить в scriptmanager.

В отношении ваших конкретных вопросов:

  • В основном это так, что дедупликация работает правильно, script у менеджера есть ограничение для исходных ресурсов script, которые мешают им быть сценарием, поэтому они должны быть сопоставлены на диске, который затем правильно деблокируется, поскольку файлы уже включены в комплект. WebformsBundleJs - это сопоставление script, которое создается внутри кода PreAppStart внутри nupkgs ScriptManager. (Я согласен, что это почти невозможно обнаружить)

  • Новые функции 4.5, такие как ненавязчивая проверка, требуют jquery (через scriptmanager), поэтому менеджер script был использован для обеспечения того, чтобы jquery не отображался дважды.

  • Это будет работать отлично, но он никогда не будет дедуплироваться с помощью ScriptManager. Так что для modernizr это не будет проблемой.

  • Пакеты jquery переносят файлы jquery на диск в папку Scripts.

  • Эта ссылка тянет в msajaxbundle, который содержит все сценарии ajax, если вам не нужны/нужны, я думаю, что его можно удалить.

Ответ 2

У меня были более-менее одинаковые вопросы...

Однако по вопросу 4 у меня другое мнение.

WebFormsBundle и MsAjaxBundle являются ссылками Script, которые были определены в PreAppStatCode (например, я не могу найти, где этот файл).

Итак, у меня такое ощущение, что в том же месте (ScriptManager.WebForms PreAppStartCode) по умолчанию есть другое определение для jQuery и jQueryUI Script reference. Эти ссылки используются в менеджере Script.

Этот процесс очень важен, потому что таким образом вы используете некоторые важные функции, такие как CDN и т.д. В определении jquery в PreAppStartCode для этой конкретной ссылки существует определенный путь CDN, который будет использоваться в случае, если вы активируете EnableCDN в менеджере Script главной страницы (EnableCdn = "true" )

Ответ 3

Просто, чтобы прояснить что-то из объяснения ответа accept для Вопроса 1:

Причиной ссылок script для отдельных файлов js веб-форм является то, что локальные файлы (такие как "~/Scripts/WebForms/WebForms.js" ) переопределяют те же файлы, которые существуют в системе. Web.dll(Если вы отражаете System.Web.dll и смотрите в папке с ссылками, вы найдете те же .js файлы).