Как сообщалось, in this github issue в CTP3 нет способа сделать это через конфигурацию. Однако вы можете заменить 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...
}
}
К сожалению, вы не получите IntelliSense с этим подходом, поскольку редактор всегда использует исходный класс MvcRazorHost.
В alpha4
из vNext все, что вы просили (страницы базового типа с помощью - @inherits директивы, usings, макет) будет поддерживаться через _ViewStart.cshtml
, как обсуждалось here.
То же самое для usings и '_ViewStart'? –
@ ŞafakGür просто поместите файл _ViewStart.cshtml в папку/Views и добавьте директиву макета. Я попробовал это в CTP3 webapp по умолчанию, удалив все this.Layout = "..." директивы из представлений и, похоже, сработает. – m0sa
Обратите внимание, что многие причины, чтобы заменить базовый класс (например, добавить свойства, изменить HtmlHelper и т. Д.), Теперь не нужны в новой директиве @inject. Вы можете ввести услугу на свою страницу, а Razor будет генерировать свойство, которое заменяет исходное свойство, или добавляет новый. –