【问题标题】:<asp:ScriptManager in Asp.Net webforms, how it works?<asp:ScriptManager 在 Asp.Net webforms 中,它是如何工作的?
【发布时间】:2020-06-20 03:34:30
【问题描述】:

我试图弄清楚这是如何工作的。在来自 VS 模板(Web 表单)的网站主文件中,我阅读了以下内容:

<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>

现在一些脚本只有名称,其他的有名称和路径+程序集。 应用程序如何找出仅具有名称的路径以及为什么与其他路径存在这种差异。还有Assembly需要做什么?

【问题讨论】:

    标签: asp.net webforms master-pages


    【解决方案1】:

    如果您在解决方案资源管理器中展开 Web 项目的“引用”节点,或者打开“管理 NuGet 包”选项卡并使用“AspNet.ScriptManager”过滤已安装的包。您将看到 AspNet.ScriptManager.jQueryMicrosoft.AspNet.ScriptManager.MSAjax 等参考资料。这些软件包附带默认的 VS 模板,它们的工作是在应用程序的 PreApplicationStart 方法中添加 ScriptMappings。例如AspNet.ScriptManager.jQuery包的描述如下:

    这个包包含 AspNet.ScriptManager.jQuery 程序集,它 将自动向 ScriptManager 注册 jQuery x.y.z 为 “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 等)和 WebForms 脚本(GridView.js 等)被分离,因此它们可以从您的应用程序 Scripts 文件夹中提供,而不是从 System.Web 加载。 Assembly 和 Path 属性都存在的原因是 ScriptManager 在尝试加载这些脚本时是这些脚本的特殊情况,因此必须对 ScriptManager 代码进行特殊安排才能使其工作。基本上,当 ScriptManager 尝试加载这些脚本时,它可以从 System.Web 或 path 属性加载它们,最终在这种情况下,ScriptManager 会删除脚本引用并从 path 属性中提供脚本。

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 2011-04-30
      相关资源
      最近更新 更多