我正在尝试通过使用自定义视图引擎根据与当前 HttpContext 关联的主题动态添加视图搜索位置来向应用程序添加主题支持。
这对于原始视图非常有效,因为位置是按顺序搜索的,如果相关主题文件夹中存在视图,则使用该视图,否则它将回退到标准位置中的默认视图。
但是,我们广泛使用嵌套布局,通常至少三层深度(因此仅重写当前视图的布局将不起作用),并且 Razor 布局不使用视图引擎来解析,因为它们通常被指定为完整的应用程序根目录的路径。
例如,如果我在视图中有以下内容:
@{ Layout = "~Views/Shared/OneColumn.cshtml"; }
我知道我可以实现这样的东西:
@{ Layout = ThemeHelper.GetLayoutPath("OneColumn.cshtml"); }
但如果可能的话,我更愿意做的是:
@{ Layout = "OneColumn.cshtml"; }
并让视图引擎或任何可扩展点使用与应用于主视图相同的规则将其解决为最佳匹配。
有任何想法吗?