.net - 显示属性 : No good for resources in App_GlobalResources

标签 .net asp.net asp.net-mvc localization

这个问题确实适用于所有项目,但是我的演示环境是 MVC3 应用程序,因此有这个标签。

我为我们的 MVC2 项目编写了一个 DisplayNameAttribute 派生类,就像很多人一样,这样我就可以在 MVC 编辑器和显示模板中本地化显示名称。我提升了用于错误消息的 ValidationAttribute 本地化代码,以便它以“标准”方式运行。

然后我注意到在 MVC3 中我们有 DisplayAttribute,因此我尽职尽责地废弃了 MVC 扩展框架的 .Net 4 版本中的属性类,并更改了当前项目中的模型属性以使用这个,例如:

[Display(ResourceType = typeof(Resources.MyResources), Name = "ResourceName")]
public string ModelProperty { get; set; }

然后我运行网络应用程序,并收到类似于以下内容的错误:

System.InvalidOperationException: Cannot retrieve property 'Name' because localization failed. Type '[Resource Type Here]' is not public or does not contain a public static string property with the name '[Resource Name Here]'.

当然,我在不同的地方使用本地化,并且在类库中,此类资源通常会被标记为公共(public)。然而,在 Web 应用程序中,我将使用 App_GlobalResources 文件夹,因为,这就是它的用途!

这里的问题是,为此文件夹中的 resx 文件生成的资源访问器始终生成为内部访问,无法更改它。

因此,由于 DisplayAttribute 似乎只查找公共(public)成员(而我从 ValidationAttribute 复制并应用于我自己的 DisplayNameAttribute 的本地化代码-派生类型只是查找具有公共(public)或内部可见性的静态成员),对于任何打算使用 App_GlobalResources 的 MVC Web 应用程序来说,DisplayAttribute 似乎是禁止的本地化字符串?

除了这可能DisplayAttribute中的一个错误之外,还有其他人遇到过这个问题吗?你做了什么来解决这个问题?我是否应该尊重 DisplayAttribute 的使用并将所有资源更改为“正确”嵌入到类库项目中,并将它们全部设置为公共(public)?或者我应该放弃 DisplayAttribute 而转而使用我知道有效的其他类!?

最佳答案

您应该能够更改访问修饰符。在解决方案资源管理器中,双击 .resx 文件,然后在托管资源编辑器的右上角附近,将访问修饰符下拉列表从 内部 更改为 公开

更新

这可能有效:Making global resources public

关于.net - 显示属性 : No good for resources in App_GlobalResources,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245136/

相关文章:

c# - LINQ to XML 创建复杂的 XML 文件

c# - 如何从字符串中删除前 10 个字符?

asp.net - ASP.NET服务器端和客户端将值从一个页面传递到另一个页面有多少种方式

javascript - 将 JavaScript 移至 ASPX 页面底部以减少 PageLoad

asp.net - Windows Server 2012 中无法打开数据库错误

c# - 为什么我的 asp.net identity -user 会自动注销

c# - 当引用确实存在时,找不到类型或命名空间

c# - 在 C# 中访问 android 设备

asp.net - MVC 5 访问声明身份用户数据

asp.net-mvc - MVC 3 : Hide ID property using EditorForModel