如何从从 NuGet 包获得的 RCL 导入 Razor 页面?

How do you import a Razor page from a RCL you got from a NuGet package?

RCL 代表 Razor class 库。

我使用共享文件制作了自己的原型 RCL _Layout.cshtml,我想将其包含在我的项目中。我已经从 NuGet 安装了 RCL,希望它能自动工作,但显然没有。

我删除了我的 _Layout.cshtml,希望它能从我创建的 RCL 中删除,但显然那样不会起作用。我收到以下错误:

An unhandled exception occurred while processing the request.
InvalidOperationException: The layout view '_Layout' could not be located. The following locations were searched:
/Pages/_Layout.cshtml
/Pages/Shared/_Layout.cshtml
/Views/Shared/_Layout.cshtml

Microsoft.AspNetCore.Mvc.Razor.RazorView.GetLayoutPage(ViewContext context, string executingFilePath, string layoutPath)

更新

我将 @using libnamehere 添加到我的 _ViewImports.cshtml 文件并注释掉了 _ViewStart.cshtml 中唯一的代码行,但现在我收到以下错误:

InvalidOperationException: RenderBody has not been called for the page at '/Pages/Shared/_Layout.cshtml'. To ignore call IgnoreBody().

Microsoft.AspNetCore.Mvc.Razor.RazorPage.EnsureRenderedBodyOrSections()

InvalidOperationException: RenderBody has not been called for the page at '/Pages/Shared/_Layout.cshtml'. To ignore call IgnoreBody().

Microsoft.AspNetCore.Mvc.Razor.RazorPage.EnsureRenderedBodyOrSections()

默认情况下,每个布局都必须调用RenderBody。请务必在 _Layout.cshtml.

中添加 @RenderBody()

参考:

Layout in ASP.NET Core

整个工作步骤:

1.From Visual Studio select 新建一个新项目.

2.Select Razor Class 图书馆 > 单击下一步

3.命名库(例如,RazorClassLib1),> 单击创建。为避免文件名与生成的视图库冲突,请确保库名称不以 .Views 结尾。

4.Select S支持页面和浏览量 >Select 创建.

5.Add _BaseTemplateLayout.cshtml 位于 RazorClassLib1 项目中的 /Pages/Shared

<body>
    <div class="body">
        <h1>Layout</h1>
        @RenderBody()
    </div>
</body>

6.Add 一个新的 Razor View Start 文件到名为 _ViewStart.cshtmlRazorClassLib1 项目的 Pages 文件夹中。默认模板应包含以下代码:

@{
    Layout = "_BaseTemplateLayout";
}

项目结构:

7.Run RazorClassLib1 项目中的打包命令:

dotnet pack

得到结果:

8.Create 一个 Mvc/Razor 页项目名为 TestProject1

9.We 需要进入目标项目(TestProject1).csproj 文件。在这里,我们指出了本地 NuGet 包和 NuGet 流的路径。它应该是这样的:

<PropertyGroup>
   <TargetFramework>net5.0</TargetFramework>
    <RestoreSources>$(RestoreSources);absolute-path-to-my-solution/bin/Debug;https://api.nuget.org/v3/index.json</RestoreSources>
</PropertyGroup>

您需要将上面的 absolute-path-to-my-solution/bin/Debug 替换为您的包裹所在位置的绝对路径。当您 运行 pack 命令时,您可以通过位置获得成功的结果(第 7 步)。

10.Install TestProject1 项目中的 nuget 包使用命令(dotnet add [<PROJECT>] package <PACKAGE_NAME>):

dotnet add TestProject1 package RazorClassLib1

11.Be 确保在 Startup.cs 中添加剃须刀页面支持:

services.AddRazorPages();

12.Change 您在 TestProject1 项目中的 _ViewStart.cshtml:

@{
    Layout = "_BaseTemplateLayout";
}