DisplayAttribute:对App_GlobalResources中的资源没有好处

And*_*tan 6 .net asp.net asp.net-mvc localization

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

DisplayNameAttribute为MVC2项目编写了一个衍生类,就像很多人一样,所以我可以在MVC编辑器和显示模板中本地化显示名称.我解除了ValidationAttribute用于错误消息的本地化代码,使其以"标准"方式运行.

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

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

然后我运行Web应用程序,我收到类似这样的错误:

System.InvalidOperationException:无法检索属性"名称",因为本地化失败.类型"[此处的资源类型]"不是公共的,或者不包含名称为"[资源名称此处]"的公共静态字符串属性.

我当然在各个地方使用本地化,而在类库中,这些资源通常会被标记为公共.但是,在Web应用程序中,我将使用该App_GlobalResources文件夹,因为这就是它的用途!

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

所以,因为DisplayAttribute似乎只是寻找公共成员(而我从ValidationAttribute我自己的DisplayNameAttribute衍生类型复制并应用的本地化代码只是寻找具有公共或内部可见性的静态成员),它似乎DisplayAttribute是对任何MVC的禁止打算App_GlobalResources用于本地化字符串的网络应用程序?

除了这可能是一个错误的事实DisplayAttribute,有没有其他人遇到这个问题?你做了什么来解决它?我是否应该尊重使用DisplayAttribute和更改我的所有资源,以便在类库项目中"正确"嵌入,并将它们全部设置为公共?或者我应该放弃DisplayAttribute以支持我认识的其他课程!?

Dan*_*zzi 9

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

更新

这可能有效:将全球资源公之于众