Razor中脚本渲染代码的区别

时间:2014-07-15 12:03:14

标签: asp.net-mvc razor

当我创建使用Razor的MVC项目时,会生成以下行:

@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", false)

这些线条有什么区别?是@Scripts.Render生成<scripts>部分然后@RenderSection("scripts", false)呈现它的情况吗?

2 个答案:

答案 0 :(得分:9)

第一个呈现捆绑包,这是一组相关的Javascript文件。例如,您可能希望将jQuery和jQuery UI捆绑在一起。当在发布模式下编译解决方案时,Bundles也可以获得捆绑和缩小的好处。参考:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

@RenderSection表示使用相关布局的页面可以在布局中的特定位置注入标记。部分实际上是占位符(如果您熟悉它,则与Web表单中的ContentPlaceHolder服务器控件非常相似)。该引用可能就在关闭正文标记之前,有些人认为它是放置脚本的最佳位置。您可以有一个名为scriptsheadfooter的部分,它完全是任意的,部分根本不一定与脚本有任何关系。参考: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()代码将是   如果没有定义,则在运行时不呈现任何内容。