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

问题描述 投票:0回答: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(字符串partialViewName,对象模型,ViewDataDictionary viewData,TextWriter writer)

  • 如何引用或使用所需的部分视图?
  • wwwroot
    中的静态文件(例如JS文件和CSS)是否可以被部分视图识别到Razor类库中?
c# asp.net-core razor razor-pages asp.net-core-2.2
2个回答
0
投票

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


0
投票

我找到了解决方案:

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

就是这样,现在正在运行

© www.soinside.com 2019 - 2024. All rights reserved.