如果我在视图页面中有以下代码:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
sample content.
</p>
@section header
{
<div id="header">
Chapter 3a: Creating a Consistent Look
</div>
}
...我应该在我的布局页面中使用ff来渲染部分(如果可用)以防止在运行时发生异常:
@if (IsSectionDefined("header"))
{
@RenderSection("header")
}
但是,如果我在渲染该部分之前没有检查该部分的最后4行(例如,我对它们进行了全部注释),编译器将不会检查我的视图页面中是否定义了部分,并允许我构建和运行应用程序。在运行期间,只有在运行页面时才会出现此错误:
以下部分已定义但尚未呈现 对于布局页面“〜/ Views / Shared / _Layout2.cshtml”:“header”。
我的问题是ff:
@RenderSection
代码的设置?@section
功能是否会降低系统的可维护性(假设问题#1没有正面答案),因为我们需要在整个过程中手动搜索@section
关键字的存在整个申请?@RenderSection
而不是@RenderPage
的优势是什么?@section
有条件吗?答案 0 :(得分:2)
我从未想过这是一个问题。这个概念与aspx语法中的占位符相同,因此如果您的主页中有2个占位符,那么您应该在每个页面/视图中使用该主页包含2个内容。
菲尔·哈克(Phil Haack)有一篇关于这个论点的博客文章,它没有直接解决你的问题,但肯定是值得考虑的事情。
http://haacked.com/archive/2011/03/05/defining-default-content-for-a-razor-layout-section.aspx
答案 1 :(得分:2)
我知道它已经老了但如果有人经过这个。
@RenderSection(“header”,required:false)你可以拥有一个 是否在您的视图页面中显示@section header {}。
现在您还可以从布局中删除检查条件。 这也是有条件的!
如果您需要它,您可以: @RenderSection(“header”,required:true)但如果您的视图没有@section标题,则会抛出错误。