这个问题确实适用于所有项目,但是我的演示环境是一个 MVC3 应用程序,因此该标签。
我为我们的 MVC2 项目编写了一个 DisplayNameAttribute
派生类,就像很多人一样,所以我可以在 MVC 编辑器和显示模板中本地化显示名称。我取消了用于错误消息的 ValidationAttribute
本地化代码,以便它以“标准”方式运行。
然后我注意到在 MVC3 中我们有 DisplayAttribute
,所以我尽职尽责地废弃了我的 MVC 扩展框架的 .Net 4 版本中的属性类,并更改了我当前项目中的模型属性以使用它,例如:
[Display(ResourceType = typeof(Resources.MyResources), Name = "ResourceName")]
public string ModelProperty { get; set; }
然后我运行 Web 应用程序,并收到类似于以下内容的错误:
当然,我在不同的地方使用本地化,在类库中,这些资源通常会被标记为公开的。但是,在 Web 应用程序中,我将使用
App_GlobalResources
文件夹,因为这就是它的用途!这里的问题是,为此文件夹中的 resx 文件生成的资源访问器是 ,总是 作为内部访问生成,无法更改它。
因此,由于
DisplayAttribute
似乎只查找公共(public)成员(而我从 ValidationAttribute
复制并应用于我自己的 DisplayNameAttribute
派生类型的本地化代码只是查找具有公共(public)或内部可见性的静态成员),看来 DisplayAttribute
已关闭-对任何打算将 App_GlobalResources
用于本地化字符串的 MVC Web 应用程序的限制?除了这可能是
DisplayAttribute
中的一个错误之外,还有其他人遇到过这个问题吗?你做了什么来解决它?我是否应该尊重 DisplayAttribute
的使用并将我的所有资源更改为“正确”嵌入在类库项目中,并将它们全部设置为公共(public)?或者我应该放弃 DisplayAttribute 转而使用我知道有效的其他类!? 最佳答案
您应该能够更改访问修饰符。在解决方案资源管理器中,双击您的 .resx 文件,然后在托管资源编辑器的右上角附近,将访问修饰符下拉列表从 Internal
更改为 Public
。
更新
这可能有效:Making global resources public
关于.net - DisplayAttribute : No good for resources in App_GlobalResources,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5245136/