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
Razor ASP.NET Core-在视图外部设置布局页_Razor_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Razor ASP.NET Core-在视图外部设置布局页

Razor ASP.NET Core-在视图外部设置布局页,razor,asp.net-core,asp.net-core-mvc,Razor,Asp.net Core,Asp.net Core Mvc,我有一个ASP.NET Core 2.0应用程序,我正在尝试设置视图应该在视图外部使用的布局页面。这样,我就不必在所有视图的顶部重复相同的代码 我可以通过从以下基类继承所有视图来实现这一点,该基类在构造函数中设置视图: public class RazorPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> { public RazorPage() { var theme =

我有一个ASP.NET Core 2.0应用程序,我正在尝试设置视图应该在视图外部使用的布局页面。这样,我就不必在所有视图的顶部重复相同的代码

我可以通过从以下基类继承所有视图来实现这一点,该基类在构造函数中设置视图:

public class RazorPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> {
    public RazorPage() {
        var theme = "Theme1;"
        Layout = $"~/Areas/{theme}/Views/Shared/_Layout" + RazorViewEngine.ViewExtension;
    }
}
公共类RazorPage:Microsoft.AspNetCore.Mvc.Razor.RazorPage{
公共图书馆{
var theme=“Theme1;”
布局=$“~/Areas/{theme}/Views/Shared/_布局”+RazorViewEngine.ViewExtension;
}
}
这可以很好地工作,但是主题的名称会根据当前URL进行更改。我想我可以通过访问当前上下文来实现这一点,但是如果我在构造函数中调用context属性,它将返回null

似乎没有合适的方法覆盖我可以设置Layout属性并访问当前请求上下文的位置

有人知道另一种方法吗


请注意,我知道我可以用_ViewImports/_ViewStart文件来实现这一点,但由于我的应用程序的结构,它要求我有重复的文件,而且我不喜欢在我的视图中有业务逻辑。

我使用了IVEWLocationExpander(如@valery.sntx所建议的)指定在何处查找根据当前URL更改的主题共享视图

然后,我使用IFileProvider自动生成了一个_ViewStart文件,并将其内容设置为:

@{
    Layout = "_Layout"; 
}

第二部分是可选的,但由于我的应用程序的设计方式,它使我不必创建多个_ViewStart文件。

可以从IViewLocationExpander开始,