在 .Net Framework 项目中使用带有部分视图的 Razor 类库

Jam*_*oll 5 c# vb.net razor asp.net-core razor-class-library

我最近遇到了 Razor 类库,并不能 100% 确定它们能/不能实现什么,但我非常喜欢能够创建可以在多个视图中共享的视图(和部分视图)的概念。网络项目。

然而,虽然我了解一点 C# 并且非常熟悉转换工具,但我对 VB.Net 的熟练程度要高出 1000 倍,因此我的大部分工作都是以这种方式编码的。.NET Core,据我所知不支持VB.NET。

我按照教程并从此处下载了示例代码https://learn.microsoft.com/en-us/aspnet/core/razor-pages/ui-class?view=aspnetcore-3.1&tabs=visual-studio

这样我就能够构建一个包含 RCL 和 .NetCore 网站的解决方案,该网站使用 RCL 中的视图和部分视图。

我能够构建多个 .NETCore 网站,我所要做的就是添加对 RCL 项目的引用,它们都将使用 RCL 中的共享部分视图...一切运行良好。

除了,我不想要 .NETCore 网站项目,因为我想坚持使用 VB.NET,所以我阅读并被告知我使用 .netstandard2.0 创建的 RCL 应该与 .Net Framework 兼容。

笔记; 本质上,为了满足当前的需求,我打算主要使用 RCL 来创建要在多个项目之间共享的部分视图。我很高兴使用 C# 创建它们作为项目逻辑,并且我的很多代码逻辑已经存在于 VB 类库中,我可以导入它们,但不想重写或重新学习我在 main 中已经完成的所有内容我的大部分项目。

无论如何,将我的所有工作升级到 .NetCore 将是一场噩梦......

所以....

  • 我创建了一个针对 .Net Framework 4.7.2 的 VB Web 应用程序。
  • 我添加对 RCL 的引用
  • 我运行了一个构建来检查是否存在版本冲突或引用不兼容的情况
  • 我运行该网站来检查 Visual Studio 未捕获的构建错误

以上一切工作正常,引用添加正常,没有任何问题。

但是...我无法弄清楚如何让 RCL 中的部分视图可供网站访问。

我不断收到错误

The partial view '****' was not found or no view engine supports the searched locations.
Run Code Online (Sandbox Code Playgroud)

谁能告诉我

  • 如何连接 Razor 类库以便在 .Net Framework 项目中使用部分视图?
  • 我(很可能认识我)是否试图做一些根本不应该那样工作的事情?!

编辑...

本在下面的评论中提出了相当合理的要求,以澄清我在做什么

首先。我实际上只是在尝试新的解决方案,因此每次添加项目时,我实际上只是要“添加新项目>选择”。除了添加对我的 RCl 的引用之外,我不会编辑 Visual Studio(2019 社区版,如果有任何区别)创建的模板之外的项目。

RCL 有一个我试图显示的局部视图,它的内容是:

@using RazorUIClassLib
<h1>This is nothing but a test</h1>
Run Code Online (Sandbox Code Playgroud)

显然RazorUIClassLibRCL 的名称在哪里……现阶段根本没有其他任何内容。

文件结构是

> Pages > Shared > Test.cshtml
Run Code Online (Sandbox Code Playgroud)

我有一个 C# .NETCore 项目,WebApp1该项目与从上面的链接下载的示例中的项目完全相同,具有相关的文件结构

> Pages > Index.cshtml
Run Code Online (Sandbox Code Playgroud)

在 Index.cshtml 中我添加了这一行:

<partial name="Test"/>
Run Code Online (Sandbox Code Playgroud)

(注意;Visual Studio 似乎对于像 intellisense (ReSharper) 所说的那样查找测试文件有点不确定cannot resolve partial view'Test',但它运行良好)

我添加了第二个 C# .netcore 项目,以确保我从示例代码下载的项目没有什么“特殊”之处,该项目的结构与 Visual Studio 模板完全相同,并且文件结构略有不同:

视图 > 主页 > Index.cshtml

与上面一样,将相同的单行代码添加到此文件中,并且工作原理相同(添加这个全新项目后我所做的就是添加此行以及对我的 RCL 项目的引用)

问题项目是一个 VB 项目,显然它的目标是 .Net Framework 而不是 CORE 它实际上只是 Visual Studio 在向解决方案添加新的 MVC 项目时创建的默认文件结构,因此我们有

视图 > 主页 > Index.vbhtml

同样,除了添加对我的 RCL 项目和这一行的引用之外,我没有做任何事情:

@Html.Partial("Test")
Run Code Online (Sandbox Code Playgroud)

我也尝试过

@Html.Partial("/Pages/Shared/Test")
@Html.Partial("~/Pages/Shared/Test")
@Html.Partial("/RazorUIClassLib/Pages/Shared/Test")
@Html.Partial("~/RazorUIClassLib/Pages/Shared/Test")
Run Code Online (Sandbox Code Playgroud)

以上所有内容均带有 .cshtml 文件扩展名。

在所有情况下,我都会遇到不同形式的此错误:

The partial view 'Test' was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Home/Test.aspx
~/Views/Home/Test.ascx
~/Views/Shared/Test.aspx
~/Views/Shared/Test.ascx
~/Views/Home/Test.cshtml
~/Views/Home/Test.vbhtml
~/Views/Shared/Test.cshtml
~/Views/Shared/Test.vbhtml
Run Code Online (Sandbox Code Playgroud)

从错误中显然可以看出,它期望在Views目录中找到部分,但正如我提到的,如果我添加完整路径,我仍然会得到相同的错误,但具有不同的“我尝试查看此处”类型注释。

我一直说我没有更改任何内容,以澄清我没有进行任何路由更改...我想知道我是否应该这样做,但如果是这样,不确定什么!

Ben*_*ica 1

所以看来我的假设是错误的。尽管它们可以针对 .NET Standard,但 RCL是 ASP.NET Core 功能。您可以在他们的文档页面上看到,唯一支持的版本是 ASP.NET Core 产品。不过,您可以在 RCL 中共享视图模型和业务逻辑,但这就是它的范围。