如何为所有视图设置布局,基类和使用?

时间:2014-09-09 11:21:38

标签: asp.net-core asp.net-core-mvc

在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中做到这些?

2 个答案:

答案 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>