[英]How to render a partial view located in an application part (DLL) into main asp.net core 2.2 project
我有一個asp.net core 2.2
項目及其控制器和視圖。 由於項目要求,我需要創建一個 Razor Class 庫來從主項目中分離一些 cshtml 文件和控制器。 查看下面的項目和文件夾結構:
當我需要將位於 Razor Class 庫中的部分視圖加載到位於主項目中的視圖中時,我遇到了問題:
該應用程序拋出 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(字符串部分視圖名稱,ZA8C FDE6331BD59EB2AC96F8911C4B666Z model, ViewDataDictionary viewData, TextWriter writer)
wwwroot
中的 static 文件,例如 JS 文件和 CSS 是否被 Razor Z2BD788029FEDDAF6EFE2 庫的部分視圖識別?謝謝
請注意 Razor class 庫 (RCL) 默認僅支持 Razor 頁面,如果您想支持視圖,則應在創建新 RCL 項目頁面和視圖時選中模板選項“支持項目頁面和視圖”
ASP.NET Core 2.2 不支持此功能(在 ASP.NET Core 3.0 中引入),因此出現上述錯誤。
在這個關於“模板更改”的文檔中,您會找到更多詳細信息,如下所示:
Razor class 庫(RCL)模板默認為 Razor 組件開發。 Visual Studio 中的新模板選項為頁面和視圖提供模板支持。 在命令 shell 中從模板創建 RCL 時,傳遞--support-pages-and-views
選項 ( dotnet new razorclasslib --support-pages-and-views
)。
我找到了一個解決方案:
盡管飛漢提到自 asp.net 核心 3.0 起支持頁面和視圖的事實,但我通過在 asp.net 核心 2.2 中執行以下操作實現了在庫(DLL)中使用視圖和控制器:
我檢查了庫項目的類型:
<Project Sdk="Microsoft.NET.Sdk.Razor">
我已經配置了應用程序部分和 razor 視圖引擎選項,以便在 startup.cs 中相應地添加文件提供程序:
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));
});
就是這樣,它現在正在運行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.