Asp.net mvc 跨嵌套布局的默认内容
我有一个基本布局,BaseLayout.cshtml:Asp.net mvc 跨嵌套布局的默认内容,asp.net-mvc,asp.net-mvc-3,layout,razor,Asp.net Mvc,Asp.net Mvc 3,Layout,Razor,我有一个基本布局,BaseLayout.cshtml: <html> <body> @RenderBody() <div id="footer"> @if (!IsSectionDefined("Footer")) { Default footer markup } else { @RenderSection("Footer") }
<html>
<body>
@RenderBody()
<div id="footer">
@if (!IsSectionDefined("Footer")) {
Default footer markup
}
else {
@RenderSection("Footer")
}
</div>
</body>
</html>
@RenderBody()
@如果(!IsSectionDefined(“页脚”)){
默认页脚标记
}
否则{
@渲染部分(“页脚”)
}
我使用sidebar.cshtml从中派生嵌套布局:
@{ Layout = "BaseLayout.cshtml"; }
<div>
<div>
@RenderBody()
</div>
<div>Sidebar</div>
</div>
@{Layout=“BaseLayout.cshtml”}
@RenderBody()
边栏
需要对WithSidebar布局进行哪些更改:
@section Footer {
<div>Put your overriden content here</div>
}
@节页脚{
将覆盖的内容放在这里
}
我最初的技术需要一些额外的功能。我已经写了一篇解决这个问题的文章:我将进一步澄清我的问题。这个问题在我很抱歉的时候被重复了。我刚在这个页面上添加了一个URL。主持人一定把问题抄了过来。谢谢你详细的博文Marcin:)和解释。。。我想知道我们是否可以通过在Razor引擎中隐式地(在解析过程中)添加“this”需求来避免这个需求?我还将继续使用现有的帮助程序(Html、Url等),在边缘情况下需要一些启发式方法。但是会导致更简洁的语法:@RedefineSection(…)而不是:@this.RedefineSection(…)还有:需要传入“私有静态只读对象”_o=new object();”吗函数委托的实例?这可以避免吗?我不认为我们会像你建议的那样含蓄地添加这个。
。我们必须检测您是否已经有了类似于@this.DoSomething()
的表达式,并跳过这种情况。似乎太麻烦了,没有那么多收获。理想情况下,我们只需将这些方法添加到WebPageBase
类本身,以便它们始终可用。关于\u o=new object()
,这是因为razor内联模板实际上是Func
,所以需要传入一些内容。我可以传入null
,但由于工作方式的原因,内联模板可以访问item
lambda参数,因此可能有人试图对其进行处理,他们会得到一个NullRefException。如果你不碰项目
,那就没关系了。