0

在 Controllers 文件夹中,我创建了一个“Profile”子文件夹(/Controllers/Profile),并且我使用下面的代码将 /Views/Profile/{controller}/{action} 添加到 View Location Formats。

services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationFormats.Add("/Views/Profile/{1}/{0}" + RazorViewEngine.ViewExtension);
});

现在我想对所有配置文件页面使用相同的布局,并且我希望它是 /Views/Profile/_layout.cshtml,但除非我将它放在特定的控制器文件夹中,否则它不会被识别。

在检查 /Views/Shared 之前,有什么方法可以让每个视图在其父目录中查找 _layout?

4

1 回答 1

0
services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationFormats.Insert(0, "/Views/Profile/{1}/{0}" + RazorViewEngine.ViewExtension);
    options.ViewLocationFormats.Insert(0, "/Views/Profile/{0}" + RazorViewEngine.ViewExtension);
});

有两件事可以使这项工作。我也添加了 "/Views/Profile/{0}" 并且也使用.Insert(index, item).Add(item),这样这些位置将在默认位置之前被检查。

但这不是问题的一般解决方案,这只适用于我插入的文件夹。我相信有更好的方法使用 IViewLocationExpander 和使用命名空间,比如OdeToCode.AddFeatureFolders

如果有人知道如何使用 IViewLocationExpander(或了解OdeToCode.AddFeatureFolders源代码),那么如果他们能够制定一个通用的解决方案,那就太好了。

于 2021-06-17T18:36:13.810 回答