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中更改一堆遗留行为.
关于您的具体问题:
基本上这是正确的重复数据删除工作,脚本管理器对原始脚本资源有一个限制,阻止它们被脚本映射,所以它们需要映射到磁盘然后被正确地重复删除,因为文件已经包含在捆绑包中.WebformsBundleJs是在ScriptManager nupkgs内部的PreAppStart代码内创建的脚本映射.(我同意这几乎不可能发现)
新的4.5功能,如不显眼的验证需要jquery(通过scriptmanager),这就是为什么脚本管理器用于确保jquery不会被渲染两次.
这将工作正常,但它永远不会使用ScriptManager重复数据删除.因此对于现代化者来说,这不是一个问题.
jquery包将jquery文件放到Scripts文件夹中的磁盘上.
该引用引入包含所有ajax脚本的msajaxbundle,如果您不需要/想要它们,我认为可以安全删除.
归档时间: |
|
查看次数: |
17083 次 |
最近记录: |