在 MVC 5 Razor 页面中使用 VB.Net 模块

Posted

技术标签:

【中文标题】在 MVC 5 Razor 页面中使用 VB.Net 模块【英文标题】:Use VB.Net module inside MVC 5 Razor page 【发布时间】:2020-12-22 00:41:24 【问题描述】:

我有一个用 VB.Net 编写的模块,它有几个只读属性。它看起来像这样:

Module Name1
   Public ReadOnly Property ClientID As String
      Get
         Return "[some data here]"
      End Get
   End Property

   Public ReadOnly Property ClientKey As String
      Get
         Return "[some data here]"
      End Get
   End Property
End Module

这里没什么特别的。我想做的是在 MVC 5 Razor 页面中使用这个模块,如下所示:

<span>@Name1.ClientID - @Name1.ClientKey</span>

再一次,没什么特别的。但是运行代码会产生以下错误:

Name1 在此上下文中不可访问,因为它是“朋友”。

默认情况下,模块具有好友访问权限,这会阻止它们在当前程序集之外被访问。这就是我要的。但是从 Razor 页面调用时它不起作用。我已经检查以确保命名空间已导入,但没有成功。 (更改模块对公共的访问可以让事情正常进行,但我不希望将其公开。)

我做错了什么?

【问题讨论】:

Razor 视图被编译到它们自己的程序集中。 这能回答你的问题吗? Asp.net MVC3 access internal class from razor View @GSerg 该链接没有帮助。所要做的就是使模块公开,这意味着它可以在当前程序集之外访问,这是我不想要的。但是你的第一个回复告诉我,我想做的事不可能,所以我必须找到另一种方法来实现我的目标。 你看过第二句中提到的docs.microsoft.com/en-us/dotnet/api/…吗? @GSerg 感谢您的帮助。我已经解决了这个问题。请参阅下面的答案。 【参考方案1】:

我在这里找到了解决问题的方法:ASP.NET MVC: How to set global ViewBag properties and have them available in each View

通过创建自定义 ActionFilter,我能够设置 ViewBag 属性并将它们的值设置为我模块中的属性。然后我将该过滤器添加到 GlobalFilters 集合中。从那里,我可以在 Razor 页面中轻松访问 ViewBag 属性。

【讨论】:

以上是关于在 MVC 5 Razor 页面中使用 VB.Net 模块的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 5 中从数据库加载 Razor 视图

如何在 Razor 页面中使用 MVC 部分视图和布局

使用razor/asp.net mvc3生成静态html页面?

[Asp.Net Core]MVC_Razor布局

[Asp.Net Core]MVC_Razor布局

如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx