Asp.net core 如何为所有视图设置布局、基类和使用?
在MVC 5中,我可以为“views/Web.Config”中的所有视图设置默认基类和用法: 如何在MVC 6中执行这些操作?如CTP3中所述,无法通过配置执行这些操作。但是,您可以将默认MvcRazorHost替换为自定义MvcRazorHost: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
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>