0

RCL 代表 Razor 类库。

我使用共享文件 _Layout.cshtml 制作了自己的原型 RCL,我想将它包含在我的项目中。我已经从 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)
  • 如何正确将此 RCL 导入我的新 Web 应用程序?

更新

我添加@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()
4

1 回答 1

1

InvalidOperationException:尚未为“/Pages/Shared/_Layout.cshtml”处的页面调用 RenderBody。忽略调用 IgnoreBody()。

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

默认情况下,每个布局都必须调用RenderBody. 请务必添加@RenderBody()您的_Layout.cshtml.

参考:

ASP.NET Core 中的布局

整个工作步骤:

1.从 Visual Studio 中选择Create new a new project

2.选择Razor 类库> 单击下一步

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

4.选择支持页面和视图>选择创建

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

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

6.将新的 Razor View Start 文件添加到Pages项目中RazorClassLib1名为_ViewStart.cshtml. 默认模板应包含以下代码:

@{
    Layout = "_BaseTemplateLayout";
}

项目结构:

在此处输入图像描述

7.在RazorClassLib1项目中运行打包命令:

点网包

得到结果: 在此处输入图像描述

8.创建一个名为TestProject1.

9.我们需要进入目标项目(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)。

TestProject110.使用命令( )在项目中安装nuget包dotnet add [<PROJECT>] package <PACKAGE_NAME>

dotnet add TestProject1 package RazorClassLib1

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

services.AddRazorPages();

12.更改项目中的_ViewStart.cshtml TestProject1

@{
    Layout = "_BaseTemplateLayout";
}
于 2021-12-13T05:52:19.797 回答