这些引用ASP.NET Web Forms 4.5中捆绑CSS的方法有什么区别?

12

我使用Visual Studio 2012和内置的模板(可在添加→新建项目下找到)创建了一个全新的ASP.NET Web Forms网站应用程序项目,目标是.NET Framework 4.5。在默认提供的Site.Master页面中,我看到一些包含CSS的标记,看起来像这样:

<webopt:BundleReference runat="server" Path="~/Content/css" />

然而,我注意到我可以潜在地使用这段其他的代码来代替它....

<%: Styles.Render("~/Content/css") %>

当我查看渲染后的页面时,结果似乎是相同的。使用webopt:BundleReference和使用Styles.Render有什么区别?其中一个方法比另一个更好吗?

2个回答

10
<%: Styles.Render %> 语法用于ASP.NET MVC (无法使用ASP.NET控件,因为对于它们没有实际的页面上下文可供使用)。而BundleReference控件则是用于WebForms。
ASP.NET MVC可以使用WebForms作为视图引擎,作为Razor的替代方案(在其中您会看到太多的'@'符号),这就是为什么存在一些交叉现象的原因。
我想他们添加了这个控件是为了保持一致性,而不是要求WebForms使用者使用页面的渲染函数(<%标签)。

有趣的是,默认情况下主页面具有一些CSS的BundleReference,并使用Scripts.Render来加载Modernizr JavaScript。他们似乎可以保持一致,对两者都使用相同的方法。例如,对于两者都使用BundleReference... - ClearCloud8
1
你有没有想法为什么默认情况下同一个主页面会使用这两种方法?是否意味着应该使用webopt:BundleReference控件来渲染CSS文件,而使用Scripts.Render来渲染JS文件? - ClearCloud8
我将此标记为答案,因为我认为它最接近解释为什么这两个选项都存在,尽管它们实现了相同的目标。虽然我仍然觉得不清楚为什么 MS 会在同一个主页面中使用 两种 方法....但我还没有看到任何关于这个问题的答案。感谢您的回复。 - ClearCloud8
@ClearCloud8 我认为<%: Scripts.Render("") %><asp:ScriptManager>的区别在于,Scripts.Render可以放置在<head>中,而ScriptManager只能放置在<form runat="server">中。如果您使用html5shiv,那么Scripts.Render是唯一的选择。 - Paul Chen

2
当我查看渲染的页面时,结果似乎是相同的。使用webopt:BundleReference和使用Styles.Render有什么区别?
据我所知,BundleReference不仅用于包括脚本和样式引用,还用于将它们捆绑在一起以提高带宽效率。请参阅教程Bundling and Minification。我认为后者只是用于包含符合URL模式的一个或多个脚本的助手。

谢谢回复。然而,这两种方法似乎都在执行捆绑和缩小操作。(我刚刚通过在web.config中关闭调试、运行并检查页面源代码来测试了一下。)所以...不幸的是,这些方法之间的区别对我来说仍然是个谜...除非它实际上只是WebForms用户可以使用的另一种选择,就像Dai所建议的那样。 - ClearCloud8
2
经过进一步测试,我认为你是正确的。然而,我发现在使用<webopt:BundleReference /><%: Styles.Render() %>之间有一个显著的区别。您可以使用Styles帮助类指定样式引用的数组,例如<%: Styles.Render("~/Content/base/themes/css", "~/Content/css") %> - Robb Vandaveer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接