Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何为所有视图设置布局、基类和使用?_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core 如何为所有视图设置布局、基类和使用?

Asp.net core 如何为所有视图设置布局、基类和使用?,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,在MVC 5中,我可以为“views/Web.Config”中的所有视图设置默认基类和用法: 如何在MVC 6中执行这些操作?如CTP3中所述,无法通过配置执行这些操作。但是,您可以将默认MvcRazorHost替换为自定义MvcRazorHost: public abstract class MyPage<T> : RazorPage<T> {/*...*/} public abstract class MyPage : RazorPage {/*...*/} pu

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

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

如CTP3中所述,无法通过配置执行这些操作。但是,您可以将默认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...
    }
}
公共抽象类MyPage:RazorPage
{/*...*/}
公共抽象类MyPage:RazorPage
{/*...*/}
公共类MVCMY主机:MVCMY主机
{
public MvcMyHost():base(typeof(MyPage).FullName){}
}
公营创业
{
公共无效配置(IBuilder应用程序)
{
var配置=新配置();
AddJsonFile(“config.json”);
configuration.AddEnvironmentVariables();
app.UseServices(服务=>
{
AddMvc(配置);
services.AddTransient();
});
//等等。。。
}
}
不幸的是,这种方法无法获得intellisense,因为编辑器始终使用原始的MvcRazorHost类


在vNext的
alpha4
中,您要求的所有内容(通过-@inherits指令的页面基本类型、使用、布局)都将通过
\u ViewStart.cshtml
得到支持,如前所述。

自2017-1-14起,关于的文档说明支持:

@inherits
指令允许您完全控制Razor页面继承的类

例如,假设我们有以下自定义页面类型:

使用Microsoft.AspNetCore.Mvc.Razor;
公共抽象类CustomRazorPage:RazorPage
{
公共字符串CustomText{get;}=“Hello World。”;
}
以下Razor将生成
自定义文本:Hello World

@继承CustomRazorPage
自定义文本:@CustomText

与使用和
\u ViewStart
相同?@ŞafakGür只需将一个_ViewStart.cshtml文件放入/Views文件夹并添加布局指令。我在默认的CTP3 webapp中试用了它,从视图中删除了所有这些.Layout=“…”指令,它似乎起了作用。请注意,替换基类的许多原因(如添加属性、更改HtmlHelper等)现在都不需要新的@inject指令。您可以向页面中插入服务,Razor代码将生成一个属性来替换原始属性,或添加一个新属性。
MvcRazorHost
消失。链接的问题和整个项目也消失了。这就形成了一个视图。特别是,通用基类是泛型的,每个视图都有不同的模型。
@{ Layout = "~/Views/Shared/SomeCustomLayout.cshtml"; }
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...
    }
}
@inherits TypeNameOfClassToInheritFrom
using Microsoft.AspNetCore.Mvc.Razor;

public abstract class CustomRazorPage<TModel> : RazorPage<TModel>
{
    public string CustomText { get; } = "Hello World.";
}
@inherits CustomRazorPage<TModel>

<div>Custom text: @CustomText</div>