在 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 视图