【问题标题】:Default content across nested layout嵌套布局中的默认内容
【发布时间】:2010-12-12 11:31:21
【问题描述】:

我有一个基本布局,BaseLayout.cshtml:

<html>
<body>
    @RenderBody()
    <div id="footer">
        @if (!IsSectionDefined("Footer")) {
            Default footer markup
        }
        else {
            @RenderSection("Footer")
        }
    </div>
</body>
</html>

我从中派生了一个嵌套布局,WithSidebar.cshtml:

@{ Layout = "BaseLayout.cshtml"; }

<div>
    <div>
        @RenderBody()
    </div>
    <div>Sidebar</div>
</div>

WithSidebar 布局需要做哪些改变:

  1. 要在 View 中覆盖 BaseLayout 中的 Footer 部分?
  2. 不覆盖默认页脚并坚持使用 BaseLayout 中定义的页脚?

我正在针对 ASP.NET MVC 3 RC2 进行开发。我已经阅读了 Marcin Dobosz 的这篇文章:http://blogs.msdn.com/b/marcinon/archive/2010/12/08/optional-razor-sections-with-default-content.aspx,但我不能在嵌套布局中干净地工作。

【问题讨论】:

  • 这个问题在forums.asp.net/t/1632953.aspx重复了
  • 对不起。我最初只是在这个页面上添加了一个 URL。必须是版主复制了问题。

标签: asp.net-mvc asp.net-mvc-3 layout razor


【解决方案1】:

我的原始技术需要一些额外的功能。我写了一个new post 来解决这个问题:

【讨论】:

  • 感谢 Marcin 的详细博文 :) 以及解释......我想知道我们是否可以通过在 Razor 引擎中隐式添加(在解析期间)来避免“this”要求?我还将继续研究现有的帮助程序(Html、Url 等)。在边缘情况下需要一些启发式方法。但会产生更简洁的语法:@RedefineSection(....) 而不是:@this.RedefineSection(...) 另外:需要传入一个'私有静态只读对象 _o = new object(); ' Func 委托的实例?可以避免吗?
  • 我认为我们不会像您建议的那样隐式添加this.。我们必须检测您是否已经有类似@this.DoSomething() 的表达式并跳过这种情况。似乎太麻烦而没有那么多收获。理想情况下,我们只需将这些方法添加到 WebPageBase 类本身,以便它们始终可用。
  • 关于 _o = new object() 这是因为 razor 内联模板实际上是 Func&lt;object, HelperResult&gt; 所以你需要传入一些东西。我可以传入 null 但由于事情的工作方式,内联模板可以访问到item lambda 参数,所以有人可能会尝试用它做一些事情,他们会得到一个 NullRefException。如果你不碰item,那也没关系。
【解决方案2】:

要覆盖一个部分:

@section Footer {
    <div>Put your overriden content here</div>
}

【讨论】:

  • 我会再澄清一下我的问题。
猜你喜欢
  • 2011-07-06
  • 1970-01-01
  • 2013-08-22
  • 2013-06-02
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多