我有一个本地化的应用程序,我想知道是否可以从资源中为某个模型属性设置 DisplayName
。
我想做这样的事情:
public class MyModel {
[Required]
[DisplayName(Resources.Resources.labelForName)]
public string name{ get; set; }
}
但我不能这样做,正如编译器所说:“属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式”:(
有什么解决方法吗?我正在手动输出标签,但我需要这些标签用于验证器输出!
最佳答案
如果您使用 MVC 3 和 .NET 4,您可以使用新的 Display
System.ComponentModel.DataAnnotations
命名空间中的属性。此属性取代了 DisplayName
属性并提供更多功能,包括本地化支持。
在你的情况下,你会像这样使用它:
public class MyModel
{
[Required]
[Display(Name = "labelForName", ResourceType = typeof(Resources.Resources))]
public string name{ get; set; }
}
作为旁注,此属性不适用于 App_GlobalResources
或 App_LocalResources
中的资源。这与这些资源使用的自定义工具 (GlobalResourceProxyGenerator
) 有关。相反,请确保您的资源文件设置为“嵌入式资源”并使用“ResXFileCodeGenerator”自定义工具。
(作为进一步的旁注,您不应该将 App_GlobalResources
或 App_LocalResources
与 MVC 一起使用。您可以阅读更多关于为什么会这样的信息 here )
关于c# - 资源中的 DisplayName 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431333/