【发布时间】:2021-06-21 06:08:13
【问题描述】:
我已按照此文档查看视图组件:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-5.0#customize-the-view-search-path
但是当我尝试自定义视图搜索路径时它不起作用,我已经使用此配置作为提到的文档:
services.AddMvc()
.AddRazorOptions(options =>
{
options.ViewLocationFormats.Add("/{0}.cshtml");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
我也尝试了另一种配置:
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationFormats.Add("/{0}" + RazorViewEngine.ViewExtension);
});
但没有任何效果
我只需要将视图组件放在名为 Components 的根文件夹中,并且我的应用程序中有区域,因此每个区域都有其名为 components 的根文件夹
更新
问题仅出现在区域上,但根目录工作良好,如文档所述
我也尝试使用此配置,但没有任何效果
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationFormats.Add("/{0}" + RazorViewEngine.ViewExtension);
options.ViewLocationFormats.Add("/Areas/Admin/{0}" + RazorViewEngine.ViewExtension);
});
更新 2
在为区域添加了新的视图位置后,如前所述,它在区域上不起作用,并且搜索到的位置错误不包含我添加的区域的新位置,但是如果您从区域请求视图组件,就会发生这种情况,但是如果您从root请求它你会发现搜索到的位置错误包含你添加的区域位置。
如果我从 /Views/Home/Index.cshtml 请求视图组件
搜索到的位置将是:
InvalidOperationException:未找到视图“组件/测试/默认”。搜索了以下位置:
/Views/Home/Components/Test/Default.cshtml
/Views/Shared/Components/Test/Default.cshtml
/Pages/Shared/Components/Test/Default.cshtml
/Components/Test/Default.cshtml
/Areas/Admin/Components/Test/Default.cshtml
所以这里我添加的 2 个位置完美!
如果我从 /Areas/Admin/Views/Home/Index.cshtml 请求视图组件
搜索到的位置将是:
InvalidOperationException:未找到视图“Components/TestArea/Default”。搜索了以下位置:
/Areas/Admin/Views/Home/Components/TestArea/Default.cshtml
/Areas/Admin/Views/Shared/Components/TestArea/Default.cshtml
/Views/Shared/Components/TestArea/Default.cshtml
/Pages/Shared/Components/TestArea/Default.cshtml
所以这里错过了我添加的 2 个位置!
【问题讨论】:
-
只要您遵循
Components文件夹下 的命名约定,这应该可以工作。所以基本上这意味着你可以将Components文件夹放在你想要的任何地方但是它下面的所有项目都必须遵循视图组件的规则,例如每个文件夹代表一个视图组件,并且必须具有视图组件的名称(如果有,则删除ViewComponent后缀)。在那个引用的文件中,它清楚地表明the placeholder "{0}" represents the path "Components/{View Component Name}/{View Name}"- 所以只要遵循它的规则,你就会看到它有效。 -
路径是正确的,因为当我将相同的文件带到共享文件夹时它可以工作,但是当我将它移到根目录时它不起作用,并且错误不包括我添加的根位置配置
-
当它对您不起作用时,您应该明确说明如何(任何错误消息?)。实际上,我自己尝试过并确认 它有效。该文件是正确的,这里没有错误。这只是你的问题,或者你自己的假设。
-
我发现问题只出现在区域上使用组件时,但在根控制器上它像文档一样工作得很好,我已经更新了问题
-
好吧,你这边还是有问题,我已经尝试使用路径
/Areas/Admin/{0}.cshtml并且它正常工作在我这边,Components位于Areas/Admin下。通常如果它不起作用,你会看到一些错误,说明它试图找到组件的各种路径。
标签: c# asp.net asp.net-core asp.net-core-3.1