在MVC 5中,我可以为" Views / Web.Config"中的所有视图设置默认基类和使用:
<system.web.webPages.razor>
<pages pageBaseType="SomeCustomPageClass">
<namespaces>
<add namespace="SomeNamespace" />
我还可以在&#34; _ViewStart.cshtml&#34;中设置所有视图的默认布局:
@{ Layout = "~/Views/Shared/SomeCustomLayout.cshtml"; }
我怎样才能在MVC 6中做到这些?
答案 0 :(得分:4)
正如CTP3中报告的in this github issue,无法通过配置执行此操作。但是,您可以使用自定义MvcRazorHost替换默认的MvcRazorHost:
public abstract class MyPage<T> : RazorPage<T>
{/*...*/}
public abstract class MyPage : RazorPage
{/*...*/}
public class MvcMyHost : MvcRazorHost
{
public MvcMyHost() : base(typeof(MyPage).FullName) { }
}
public class Startup
{
public void Configure(IBuilder app)
{
var configuration = new Configuration();
configuration.AddJsonFile("config.json");
configuration.AddEnvironmentVariables();
app.UseServices(services =>
{
services.AddMvc(configuration);
services.AddTransient<IMvcRazorHost, MvcMyHost>();
});
// etc...
}
}
不幸的是,由于编辑器总是使用原始的MvcRazorHost类,因此您无法使用此方法进行智能感知。
在alpha4
的vNext中,您所要求的所有内容(页面基本类型通过 - @inherits指令,使用,布局)将通过_ViewStart.cshtml
here得到支持。
答案 1 :(得分:0)
截至2017年1月14日,Razor Directives上的文档表示支持:
@inherits
指令使您可以完全控制Razor页面继承的类
@inherits TypeNameOfClassToInheritFrom
例如,假设我们有以下自定义Razor页面类型:
using Microsoft.AspNetCore.Mvc.Razor;
public abstract class CustomRazorPage<TModel> : RazorPage<TModel>
{
public string CustomText { get; } = "Hello World.";
}
以下Razor会生成
<div>Custom text: Hello World</div>
。
@inherits CustomRazorPage<TModel>
<div>Custom text: @CustomText</div>