如何解决如何将位于应用程序部分 (DLL) 中的局部视图渲染到主要的 asp.net core 2.2 项目中
我有一个带有控制器和视图的 asp.net core 2.2
项目。由于项目要求,我需要创建一个 Razor 类库来将一些 cshtml 文件和控制器与主项目分开。查看下面的项目和文件夹结构:
当我需要将位于该 Razor 类库中的部分视图加载到位于主项目中的视图时,我遇到了问题:
应用程序抛出 500 错误:
处理请求时发生未处理的异常。 InvalidOperationException: 未找到局部视图“_ComponenteDivisionPoliticaPartial”。搜索了以下位置: /Areas/Administracion/Views/GeneralPersonas/_ComponenteDivisionPoliticaPartial.es-CO.cshtml /Areas/Administracion/Views/GeneralPersonas/_ComponenteDivisionPoliticaPartial.es.cshtml /Areas/Administracion/Views/GeneralPersonas/_ComponenteDivisionPoliticaPartial.cshtml /Areas/Administracion/Views/Shared/_ComponenteDivisionPoliticaPartial.es-CO.cshtml /Areas/Administracion/Views/Shared/_ComponenteDivisionPoliticaPartial.es.cshtml /Areas/Administracion/Views/Shared/_ComponenteDivisionPoliticaPartial.cshtml /Views/Shared/_ComponenteDivisionPoliticaPartial.es-CO.cshtml /Views/Shared/_ComponenteDivisionPoliticaPartial.es.cshtml /Views/Shared/_ComponenteDivisionPoliticaPartial.cshtml /Pages/Shared/_ComponenteDivisionPoliticaPartial.es-CO.cshtml /Pages/Shared/_ComponenteDivisionPoliticaPartial.es.cshtml /Pages/Shared/_ComponenteDivisionPoliticaPartial.cshtml Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.RenderPartialCoreAsync(string partialViewName,object model,ViewDataDictionary viewData,TextWriter writer)
谢谢
解决方法
请注意,默认情况下,Razor 类库 (RCL) 中仅支持 Razor 页面,如果您想支持视图,模板选项“支持页面和视图”应为在创建新的 RCL 项目时检查。
ASP.NET Core 2.2(在 ASP.NET Core 3.0 中引入)不支持此功能,因此您遇到了上述错误。
在这个关于“模板更改”的文档中,您会找到更详细的信息,如下所示:
Razor 类库 (RCL) 模板默认为 Razor 组件开发。 Visual Studio 中的新模板选项为页面和视图提供模板支持。在命令 shell 中从模板创建 RCL 时,传递 --support-pages-and-views
选项 (dotnet new razorclasslib --support-pages-and-views
)。
我找到了解决方案:
尽管 Fei Han 提到从 asp.net core 3.0 开始支持对页面和视图的支持,但我通过在 asp.net core 2.2 中执行以下操作实现了在库 (DLL) 中使用视图和控制器:
我已经检查了库项目的类型:
<Project Sdk="Microsoft.NET.Sdk.Razor">
我已经在 startup.cs 中配置了应用程序部分和 razor 视图引擎选项,以便相应地添加文件提供程序:
services.ConfigureApplicationPartManager(c =>
{
c.ApplicationParts.Add(new AssemblyPart(typeof(ComponenteDivisionPoliticaController).GetTypeInfo().Assembly));
}
);
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(new EmbeddedFileProvider(typeof(ComponenteDivisionPoliticaController).GetTypeInfo().Assembly));
});
就是这样,它正在运行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。