一尘不染

来自资源的DisplayName属性?

c#

我有一个本地化的应用程序,我想知道是否可以DisplayName从Resource中为特定模型属性设置。

我想做这样的事情:

public class MyModel {
  [Required]
  [DisplayName(Resources.Resources.labelForName)]
  public string name{ get; set; }
}

但是我不能接受,正如编译器所说:“属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式” :(

有什么解决方法吗?我正在手动输出标签,但是验证器输出需要这些标签!


阅读 464

收藏
2020-05-19

共1个答案

一尘不染

如何编写自定义属性:

public class LocalizedDisplayNameAttribute: DisplayNameAttribute
{
    public LocalizedDisplayNameAttribute(string resourceId) 
        : base(GetMessageFromResource(resourceId))
    { }

    private static string GetMessageFromResource(string resourceId)
    {
        // TODO: Return the string from the resource file
    }
}

可以这样使用:

public class MyModel 
{
    [Required]
    [LocalizedDisplayName("labelForName")]
    public string Name { get; set; }
}
2020-05-19