Asp.net mvc 在ASP.NET MVC中,使用@RenderSection(相对于@RenderPage)有什么好处?
如果我做错了什么事,我希望得到启发。我敢打赌我是 如果我的查看页面中有以下代码:Asp.net mvc 在ASP.NET MVC中,使用@RenderSection(相对于@RenderPage)有什么好处?,asp.net-mvc,Asp.net Mvc,如果我做错了什么事,我希望得到启发。我敢打赌我是 如果我的查看页面中有以下代码: @{ ViewBag.Title = "About Us"; } <h2>About</h2> <p> sample content. </p> @section header { <div id="header"> Chapter 3a: Creating a Consistent Look </d
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
sample content.
</p>
@section header
{
<div id="header">
Chapter 3a: Creating a Consistent Look
</div>
}
但是,如果我没有在呈现节之前检查节的最后4行(比如,我对它们全部进行了注释),编译器将不会检查我是否在视图页面中定义了节,并允许我构建和运行应用程序。在运行时,只有在运行页面时才会出现以下错误:
以下部分已定义,但尚未呈现
对于布局页面“~/Views/Shared/_Layout2.cshtml”:“页眉”
我的问题如下:
@RenderSection
代码@section
关键字,使用@section
功能是否会降低系统的可维护性(假设问题1没有肯定答案)@RenderSection
与@RenderPage
相比有什么好处@部分设置为有条件的
我从没想过这是个问题。在aspx语法中,占位符的概念是相同的,因此如果您的主页中有2个占位符,那么您应该在使用该母版页的每个页面/视图中有2个内容 Phil Haack在争论中有一篇博客文章,它并没有直接解决你的问题,但肯定是有意思的。
我知道它很旧,但如果有人路过这里 @RenderSection(“header”,required:false)通过此选项,您可以 @是否在您的查看页面中显示节头{} 现在还可以从布局中删除检查条件。 也以此为条件 如果需要,您可以:
@RenderSection(“header”,必选:true),但是如果您的视图没有@section头,它将抛出一个错误。感谢您的快速回答。至于节与占位符概念的关系,据我所知,占位符对象的存在和/或不存在是在服务器端代码中检查的(因为如果页面中不存在占位符对象,则不能在代码隐藏中使用占位符对象),而字符串(例如,“页眉”)在编译时未检查。我希望我正确理解了您对占位符的使用。谢谢事实上,不是。这不是它的工作原理。代码隐藏根本不相关。实际上,由于Mvc2 aspx视图甚至没有代码隐藏文件。我的意思是,在概念级别,标记等价于@RenderSection()语句,标记等价于@section{}声明。我并不是说它们的工作原理完全相同。不过,我确信在编译时没有检查这两个选项。您可以尝试在csproj中将标记设置为true,看看是否有任何改进。我理解您的意思。我以为你指的是这个占位符()而不是这个占位符()。至于它们的相似性(ContentPlaceHolder==@RenderSection();Content==@section),据我所知,您似乎是正确的。但是,ContentPlaceHolder/内容对与@RenderSection()/@节对不同的是,ContentPlaceHolder/内容对(及其相互之间的关系)比@RenderSection()更明显/明确/可见/@除了IDE提供了工具,当您想在ASPX页面中使用ContentPlaceHolder(在母版页中)时,可以将两者连接起来。
@if (IsSectionDefined("header"))
{
@RenderSection("header")
}