MVC3视图继承不可能?

Jac*_*ack 11 inheritance razor asp.net-mvc-3

我想创建一个抽象基本视图(包含许多带有cshtml的虚拟方法),然后创建一个派生视图,可以选择覆盖这些方法来自定义视图:

例如:

override void Header(string title) {
 <div class="massive">@title</div>
}
Run Code Online (Sandbox Code Playgroud)

如何用剃刀实现这一目标?

(不是每个人都想/需要这样做吗?)

Rus*_*Cam 7

虽然我确信通过一些努力可以让它发挥作用,但它并不像开箱即用那样.

相反,您可以使用已定义的部分创建布局,然后根据需要从添加新部分的布局中派生其他布局.然后,视图将声明它正在使用的布局

@{
    Layout = "_Layout.cshtml" // app relative path to layout
}
Run Code Online (Sandbox Code Playgroud)

并且可以根据需要使用提供任何部分的标记

@section SectionName {
    <p>I'm markup to go into a section in the layout this view is using</p>
}
Run Code Online (Sandbox Code Playgroud)

您可以通过ViewData和/或传递数据ViewBag,因此如果您想这样做,可以使用它们来传递代理.

或者,您可以决定向您的派生类型添加扩展方法HtmlHelper,UrlHelper甚至创建WebViewPage派生自System.Web.Mvc.WebViewPage和添加任何其他属性/方法,然后将其设置为视图使用的web.config pageBaseType中的属性/方法<system.web.webPages.razor>.