我正在寻找允许我提供不同模板的解决方案取决于会话中设置的内容(中间件将根据域设置它)。
我所寻找的是,当设置主题时,当某些视图假设要渲染时,mvc将从特定主题渲染视图。
我怎么能用net core 2,mvc和razor做到这一点?如果添加主题不需要重新编译(例如类似于Wordpress - 上传包含所有必需文件的zip文件),那就太棒了。
我真的不知道从哪里开始...
我正在尝试谷歌一些解决方案,但我发现只有一个完全过时。
答案 0 :(得分:0)
基本上,您只需要自定义Razor搜索视图的目录列表。默认情况下,这些是Views\{controller}
和Views\Shared
。你只需要做到这一点(如果某个特定主题选择不提供视图)(或{theme}\Views\{controller}
和{theme}\Views\Shared
,那么它们就可以(或者更好地回退到“基础”主题),或者类似的东西。
不幸的是,documentation在这里没有提供太多支持。你得到的只有:
您可以使用自定义IViewLocationExpander自定义视图在应用中的位置默认约定。
顾名思义,这是一个Razor用来获取搜索视图的位置列表的接口。换句话说,你只需要创建自己的实现然后注入它。像LanguageViewLocationExpander
这样的东西可以让你知道你需要做什么,因为游戏的基本原理是相同的。它用于本地化,并提供嵌套在特定于语言文件夹下的视图的功能。