ASP.NET核心 - 在视图外部设置布局页面

问题描述 投票:1回答:1

我有一个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;
    }
}

这工作正常,但主题名称根据当前URL更改。我想我可以通过访问当前上下文来做到这一点,但是如果我在构造函数中调用Context属性它返回null。

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

有没有人知道另一种做法?

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

razor asp.net-core asp.net-core-mvc
1个回答
1
投票

我使用IViewLocationExpander(由@ valery.sntx建议)指定在哪里查找我的主题的共享视图,该视图根据当前URL进行更改。

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

@{
    Layout = "_Layout"; 
}

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

© www.soinside.com 2019 - 2024. All rights reserved.