我最近遇到了 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>
显然RazorUIClassLib
RCL 的名称在哪里……在这个阶段根本没有其他内容。
文件结构是
> 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,但正如我所提到的,如果我添加完整路径,我仍然会遇到相同的错误,但会出现不同的“我尝试在此处查找”类型的注释。
我一直说我没有更改任何内容以澄清我没有进行任何路由更改......我想知道我是否应该,但如果是的话,不确定是什么!