StringLength 検証のデフォルトの ErrorMessage を変更する 質問する

StringLength 検証のデフォルトの ErrorMessage を変更する 質問する

StringLength 検証のデフォルトの ErrorMessage は、私が望むよりもずっと長いです。

フィールド {Name} は、最大長が {StringLength} の文字列である必要があります。

これを全体的に次のように変更したいと思います。

最大長は {StringLength} です。

宣言する文字列ごとに ErrorMessage を重複して指定することは避けたいと思います。

    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string OfficePhone { get; set; }
    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string CellPhone { get; set; }

ErrorMessage を普遍的に変更する簡単な方法があったと記憶しているのですが、思い出せません。

編集:

わかりやすくするために、次のように入力できるようにデフォルトの ErrorMessage を全体的に変更しようとしています。

    [StringLength(20)]
    public string OfficePhone { get; set; }

エラーメッセージには次のように表示されます。

最大長は20です。

ベストアンサー1

StringLength属性は、以下のように多数のプロパティに指定できます。

[StringLength(20, ErrorMessageResourceName = "StringLengthMessage", ErrorMessageResourceType = typeof(Resource))]
public string OfficePhone { get; set; }
[StringLength(20, ErrorMessageResourceName = "StringLengthMessage", ErrorMessageResourceType = typeof(Resource))]
public string CellPhone { get; set; }

StringLengthMessageリソースファイルに文字列リソース( という名前)を追加します。

"Maximum length is {1}"

メッセージは一度定義され、テスト対象の長さに関して考えが変わった場合に備えて、変数プレースホルダーが用意されています。

以下を指定できます。

  1. {0} - 名前
  2. {1} - 最大長
  3. {2} - 最小長

アップデート

重複をさらに最小限に抑えるには、StringLengthAttribute をサブクラス化します。

public class MyStringLengthAttribute : StringLengthAttribute
{
    public MyStringLengthAttribute() : this(20)
    {
    }

    public MyStringLengthAttribute(int maximumLength) : base(maximumLength)
    {
        base.ErrorMessageResourceName = "StringLengthMessage";
        base.ErrorMessageResourceType = typeof (Resource);
    }
}

FormatErrorMessageまたは、追加のパラメータを追加したい場合はオーバーライドできます。プロパティは次のようになります。

[MyStringLength]
public string OfficePhone { get; set; }
[MyStringLength]
public string CellPhone { get; set; }

おすすめ記事