<asp: ScriptManager в Asp. Net веб-формах, как это работает? - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь выяснить, как это работает. В мастере сайта из шаблона VS (веб-формы) я прочитал следующее:

<asp:ScriptManager runat="server">

      <Scripts>

            <asp:ScriptReference Name="MsAjaxBundle" />
            <asp:ScriptReference Name="jquery" />
            <asp:ScriptReference Name="bootstrap" />
            <asp:ScriptReference Name="respond" />
            <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>

Теперь некоторые сценарии имеют только имена, другие имеют имена и пути + сборка. Как приложение определяет пути тех, у кого есть только имена, и почему эта разница отличается от других. И для чего нужна сборка?

1 Ответ

1 голос
/ 13 марта 2020

Если развернуть узел «Ссылки» вашего веб-проекта в обозревателе решений или открыть вкладку «Управление пакетами NuGet» и отфильтровать установленные пакеты с помощью «As pNet .ScriptManager». вы увидите ссылки, такие как AspNet.ScriptManager.jQuery и Microsoft.AspNet.ScriptManager.MSAjax. Эти пакеты поставляются с шаблоном VS по умолчанию, и их задача состоит в том, чтобы добавить ScriptMappings в метод приложения PreApplicationStart . Например, описание пакета AspNet.ScriptManager.jQuery выглядит следующим образом:

Этот пакет содержит сборку As pNet .ScriptManager. jQuery, которая автоматически регистрирует jQuery xyz в ScriptManager. как "jquery".

Итак, эти имена используются ScriptManager.

А вот пример определений ScriptMapping, добавленных этими пакетами:

string str = "x.y.z";
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"
});

В ASP. NET 4.5 файлы сценариев Microsoft Ajax (MicrosoftAjaxCore et c) и сценарии WebForms (GridView. js et c) были отделены, чтобы их можно было обслуживать из папки сценариев приложения, а не загружать из System.Web. Причина, по которой присутствуют атрибуты Assembly и Path, заключается в том, что ScriptManager в особых случаях обрабатывает эти сценарии при попытке их загрузки, поэтому для выполнения этой работы необходимо было выполнить специальные соглашения с кодом ScriptManager. По сути, когда ScriptManager пытается загрузить эти сценарии, он может загрузить их из System.Web или атрибута пути, и в конечном итоге в этом случае ScriptManager выводит ссылки на сценарии и обслуживает сценарии из атрибута пути.

...