当我创建使用Razor的MVC项目时,会生成以下行:
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", false)
这些线条有什么区别?是@Scripts.Render
生成<scripts>
部分然后@RenderSection("scripts", false)
呈现它的情况吗?
答案 0 :(得分:9)
第一个呈现捆绑包,这是一组相关的Javascript文件。例如,您可能希望将jQuery和jQuery UI捆绑在一起。当在发布模式下编译解决方案时,Bundles也可以获得捆绑和缩小的好处。参考:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
@RenderSection
表示使用相关布局的页面可以在布局中的特定位置注入标记。部分实际上是占位符(如果您熟悉它,则与Web表单中的ContentPlaceHolder
服务器控件非常相似)。该引用可能就在关闭正文标记之前,有些人认为它是放置脚本的最佳位置。您可以有一个名为scripts
,head
或footer
的部分,它完全是任意的,部分根本不一定与脚本有任何关系。参考:http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor
答案 1 :(得分:5)
这些是完全不同的东西。
@Scripts.Render("~/bundles/jquery")
为您呈现一组脚本,创建所有<script>
标记。在BundleConfig.cs
文件中,您可以创建脚本和css文件的捆绑包。
它的一个优点是允许您将多个常用文件组合在一起。您可以使用显式Scripts.Render(groupName)
包含所有这些文件,而不是明确地包含这些文件中的每一个。
您可以阅读有关Bundling and Minification here的更多信息。
@RenderSection("scripts", false)
是关于在视图中渲染部分。
部分允许您指定布局中的内容区域。它需要一个参数,即该部分的名称。如果您不提供,则会抛出异常。
这是一篇很好的文章,解释了Layouts, RenderBody, RenderSection and RenderPage in ASP.NET MVC。
“RenderSection()”辅助方法的第一个参数指定 我们想要在该位置呈现的部分的名称 布局模板。第二个参数是可选的,允许我们使用 定义我们正在渲染的部分是否是必需的。如果一个 section是“必需的”,然后Razor会在运行时抛出一个错误 该部分未在基于的视图模板中实现 在布局文件上(可以更容易地跟踪内容 错误)。如果不需要一个部分,那么它的存在就在一个部分内 视图模板是可选的,上面的RenderSection()代码将是 如果没有定义,则在运行时不呈现任何内容。