如何将位于应用程序部分 (DLL) 中的部分视图呈现到主 asp.net core 2.2 项目中

Posted

技术标签:

【中文标题】如何将位于应用程序部分 (DLL) 中的部分视图呈现到主 asp.net core 2.2 项目中【英文标题】:How to render a partial view located in an application part (DLL) into main asp.net core 2.2 project 【发布时间】:2021-03-29 14:57:56 【问题描述】:

我有一个带有控制器和视图的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)

如何引用或使用所需的局部视图? wwwroot中的静态文件如JS文件、CSS等是否被 Razor 类库的部分视图?

谢谢

【问题讨论】:

【参考方案1】:

请注意,默认情况下,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)。

【讨论】:

【参考方案2】:

我找到了解决办法:

尽管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));
        );

就是这样,它现在正在运行

【讨论】:

以上是关于如何将位于应用程序部分 (DLL) 中的部分视图呈现到主 asp.net core 2.2 项目中的主要内容,如果未能解决你的问题,请参考以下文章

如何在被父视图部分裁剪的子视图上触发 UITapGestureRecognizer?

无法让 UIScrollView 工作

部分视图中的模型为空 - asp.net core razor pages

如何将位于主页部分标题中的预定义 <h2> 标签更改为 wordpress appperia 主题中的 <h1> 标签

特定部分应位于表格视图的顶部

Jquery Ajax Post 后部分视图刷新