gpt4 book ai didi

asp.net - VS2012 - Web 表单 - 捆绑困惑

转载 作者:行者123 更新时间:2023-12-03 06:03:24 39 4
gpt4 key购买 nike

我通过 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"));

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 中。我什至没有看到对在 BundleConfig.cs 之外的任何地方创建的“WebFormsJs”包的引用。如果这些 javascript 文件中的每一个都将在 ScriptManager 中单独引用,为什么还要创建该包?

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

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

<%: Scripts.Render("~/bundles/modernizr") %>

问题 4:
在 ScriptManager 内部我还注意到了这些:

        <asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />

...我至少可以从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" />

但我也不明白这里发生了什么。我以为packages.config是用于NuGet的。另外...我什至没有看到此处列出的这些 jQuery .js 文件的位置路径。它们只是列在这里,并且与 .NET Framework 的特定版本(在我的例子中为 4.5)有着奇怪的关联。我无法理解为什么 javascript 资源会与 .NET Framework 的某个版本相关联。

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

问题 5:
如果我不打算使用 UpdatePanel 和此类 Microsoft Ajax 控件,我可以从 Site.Master 中删除以下脚本引用吗?我有点困惑为什么默认情况下会将其包含在这里。

<asp:ScriptReference Name="MsAjaxBundle" />

最佳答案

更新:这是一篇新的博客文章,其中也详细讨论了这一点:ASP.NET article

基本上,网络表单+捆绑看起来像这样,因为我们无法在脚本管理器中更改一堆遗留行为。

关于您的具体问题:

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

  2. 新的 4.5 功能(例如不引人注目的验证)需要 jquery(通过 scriptmanager),这就是为什么使用脚本管理器来确保 jquery 不会被渲染两次。

  3. 这可以正常工作,但它永远不会使用 ScriptManager 进行重复数据删除。所以对于 Modernizr 来说这不会是一个问题。

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

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

关于asp.net - VS2012 - Web 表单 - 捆绑困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290537/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com