如何从从 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)
- 如何将此 RCL 正确导入我的新网络应用程序?
更新
我将 @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()
参考:
整个工作步骤:
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.cshtml
的 RazorClassLib1
项目的 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";
}
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)
- 如何将此 RCL 正确导入我的新网络应用程序?
更新
我将 @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()
参考:
整个工作步骤:
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.cshtml
的 RazorClassLib1
项目的 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";
}