5

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

<system.web.webPages.razor>
  <pages pageBaseType="SomeCustomPageClass">
    <namespaces>
      <add namespace="SomeNamespace" />

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

@{ Layout = "~/Views/Shared/SomeCustomLayout.cshtml"; }

如何在 MVC 6 中执行这些操作?

4

2 回答 2

4

正如CTP3中的这个 github 问题中所报告的,无法通过配置来做到这一点。但是,您可以将默认的 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 类。

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

于 2014-09-09T11:39:03.700 回答
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>
于 2017-07-13T18:56:20.503 回答