1. ホーム
  2. c#

[解決済み] リソースからDisplayName属性?

2022-04-24 19:19:15

質問

ローカライズされたアプリケーションを持っているのですが、そのアプリケーションに DisplayName を、リソースから特定のモデルプロパティに設定することができます。

こんな感じでやってみたいと思います。

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

しかし、コンパイラは次のように言うので、私はそれを行うことはできません: "属性の引数は、属性パラメータ型の定数式、typeof式または配列作成式でなければなりません" :(

何か回避策はあるのでしょうか?私はラベルを手動で出力していますが、バリデータの出力にはこれが必要なのです。

解決方法は?

カスタム属性を記述するのはどうでしょうか。

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; }
}