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

Şaf*_*Gür 5 asp.net-core-mvc asp.net-core

在MVC 5中,我可以为"Views/Web.Config"中的所有视图设置默认基类和使用:

<system.web.webPages.razor>
  <pages pageBaseType="SomeCustomPageClass">
    <namespaces>
      <add namespace="SomeNamespace" />
Run Code Online (Sandbox Code Playgroud)

我还可以在"_ViewStart.cshtml"中为所有视图设置默认布局:

@{ Layout = "~/Views/Shared/SomeCustomLayout.cshtml"; }
Run Code Online (Sandbox Code Playgroud)

我怎样才能在MVC 6中做到这些?

m0s*_*0sa 4

正如CTP3 中的 github 问题中所报告的,无法通过配置来执行此操作。不过,您可以将默认的 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...
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,您无法通过这种方法获得智能感知,因为编辑器始终使用原始的 MvcRazorHost 类。

alpha4vNext 中,您所要求的所有内容(通过 @inherits 指令的页面基本类型、使用、布局)都将通过此处的_ViewStart.cshtml讨论得到支持。