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}"
メッセージは一度定義され、テスト対象の長さに関して考えが変わった場合に備えて、変数プレースホルダーが用意されています。
以下を指定できます。
- {0} - 名前
- {1} - 最大長
- {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; }