3

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

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

我按照教程并从这里下载了示例代码https://docs.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 的引用
  • 我运行了 Build 来检查没有版本冲突或引用不兼容
  • 我运行该网站以检查没有被 Visual Studio 捕获的构建错误

以上所有工作正常,参考添加OK,完全没有问题。

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

我不断收到错误

The partial view '****' was not found or no view engine supports the searched locations.

谁能告诉我

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

编辑...

Ben 在下面的评论中提出了相当合理的要求,以明确我在做什么

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

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

@using RazorUIClassLib
<h1>This is nothing but a test</h1>

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

文件结构是

> Pages > Shared > Test.cshtml

我有一个名为的 C# .NETCore 项目WebApp1,它是从上面链接下载的示例中的确切项目,具有相关的文件结构

> Pages > Index.cshtml

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

<partial name="Test"/>

(注意;Visual Studio 似乎有点不确定如何找到测试文件,因为智能感知(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")

我也试过

@Html.Partial("/Pages/Shared/Test")
@Html.Partial("~/Pages/Shared/Test")
@Html.Partial("/RazorUIClassLib/Pages/Shared/Test")
@Html.Partial("~/RazorUIClassLib/Pages/Shared/Test")

以及以上所有带有 .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

从错误中可以清楚地看出,它期望在Views目录中找到 Partial,但正如我所提到的,如果我添加完整路径,我仍然会遇到相同的错误,但会出现不同的“我尝试在此处查找”类型的注释。

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

4

1 回答 1

1

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

于 2020-05-30T19:52:55.130 回答