VS2012 - Web表单 - 捆绑混乱

Cle*_*ud8 51 asp.net webforms visual-studio-2012 asp.net-optimization

我通过Visual Studio 2012创建了一个新的ASP.NET Web窗体项目.不幸的是,默认的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"));
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的......每个相同的.js文件都单独列在ScriptManager中.我甚至没有看到在BundleConfig.cs之外的任何地方创建的"WebFormsJs"包的引用.如果这些javascript文件中的每一个都将在ScriptManager中单独引用,为什么要创建该bundle?

问题2:
为什么要以这种方式使用ScriptManager?我的印象是,Microsoft的Ajax版本需要使用ScriptManager,例如使用UpdatePanels.这里使用ScriptManager的目的是什么...只是简单地注册javascript文件?

问题3:
通过ScriptManager注册javascript文件与使用以下方法的Site.Master顶部注册有什么区别?

<%: Scripts.Render("~/bundles/modernizr") %>
Run Code Online (Sandbox Code Playgroud)

问题4:
在ScriptManager中我也注意到了这些:

        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />
Run Code Online (Sandbox Code Playgroud)

...我至少可以从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" />
Run Code Online (Sandbox Code Playgroud)

但我也不明白这里发生了什么.我以为packages.config用于NuGet.另外......我甚至没有看到这里列出的路径,这些jQuery .js文件的位置.它们刚刚列在这里,与.NET Framework的特定版本(在我的情况下为4.5)奇怪地相关联.为什么javascript资源与.NET Framework的一个版本相关联是超出我的.

无论如何,问题4是:如何添加/使用ScriptManager中的资源"jquery"?为什么我看不到像所有其他捆绑包一样捆绑在BundleConfig.cs中的jQuery .js文件?

问题5:
如果我不打算使用UpdatePanel和那些类型的Microsoft Ajax控件,是否可以从Site.Master中删除以下脚本引用?我有点困惑,为什么这个默认包含在这里.

<asp:ScriptReference Name="MsAjaxBundle" />
Run Code Online (Sandbox Code Playgroud)

Hao*_*ung 16

更新:这是一篇新的博客文章,其中还讨论了更多:ASP.NET文章

基本上webforms +捆绑看起来像这样,因为我们无法在scriptmanager中更改一堆遗留行为.

关于您的具体问题:

  1. 基本上这是正确的重复数据删除工作,脚本管理器对原始脚本资源有一个限制,阻止它们被脚本映射,所以它们需要映射到磁盘然后被正确地重复删除,因为文件已经包含在捆绑包中.WebformsBundleJs是在ScriptManager nupkgs内部的PreAppStart代码内创建的脚本映射.(我同意这几乎不可能发现)

  2. 新的4.5功能,如不显眼的验证需要jquery(通过scriptmanager),这就是为什么脚本管理器用于确保jquery不会被渲染两次.

  3. 这将工作正常,但它永远不会使用ScriptManager重复数据删除.因此对于现代化者来说,这不是一个问题.

  4. jquery包将jquery文件放到Scripts文件夹中的磁盘上.

  5. 该引用引入包含所有ajax脚本的msajaxbundle,如果您不需要/想要它们,我认为可以安全删除.

  • 这对任何人来说都是荒谬的吗? (19认同)