1

假设子视图:

@Section Section1 {
   @:Section1 Stuff
}

@Section Section2 {
   @:Section2 Stuff
}

@Section ExtraSection {
   @:Extra Section Stuff
}

如何设置主视图,以便 Section1 和 Section2 各归其位,而其余的都以统一的方式处理?(例如像@RenderAllOtherSections())

@RenderSection("Section1")
@RenderSection("Section2")
@RenderBody()
@RenderAllOtherSections() // ExtraSection is rendered here. How?

更新:检查剃刀视图网页的基本对象后,我发现有一个字典,其中包含在前一个(调用)视图中定义的部分。它位于PreviousSectionWriters参数中,但这有一个私人获取。还有,这个字典其实是栈中的第二项SectionWritersStack,但是栈中也有一个私有的get。已经渲染的部分存储为“完成” HashSet<string> _renderedSections,这也是私有的。

简而言之,我需要访问的内容WebPageBase是:

public abstract class WebPageBase : WebPageRenderingBase
{
      private HashSet<string> _renderedSections

      Dictionary<string, SectionWriter> PreviousSectionWriters // private get, its the 2nd item in SectionWritersStack
     Stack<Dictionary<string, SectionWriter>> SectionWritersStack // this would do too, but private get
}

所以现在的问题是,我该怎么做才能访问这些属性?辅助方法bool IsSectionDefined(string name)是唯一可以使用的公共可访问的东西,但它并没有真正的帮助。

4

1 回答 1

1

这是不可能的。如果这样的事情是可能的,母版页将如何理解哪个部分将是第一,第二......等等。?

如果我理解你的情况,你需要在 @RenderBody() Alternativle 之后渲染部分,你可以有这样的东西:

Master page
@RenderSection("Section1")
@RenderSection("Section2")
@RenderBody()
@RenderSection("PostBodySection", false) // The second parameter - false means that this section is not mandatory

在子视图中,您可以选择是否在“PostBodySection”中包含任何内容。

于 2012-06-15T15:59:40.370 回答