web-dev-qa-db-ja.com

stringlength属性のエラーメッセージはどのようなパラメーターを受け取りますか?

MVC4テンプレートでは、使用されるデータアノテーション属性の1つはstringlengthです。

例えば:

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]

どのパラメータ{0}、{1}、{2}(その他?)が有効ですか?

編集:より具体的には、例と試行錯誤から可能性を確認できますが、いくつかのハードドキュメントを参照してください。

StringLengthAttributeのドキュメント では、これについて何も見つかりません。

34

{0}インデックスはプロパティの表示名、{1}MaximumLength{2}MinimumLengthです。したがって、エラーメッセージは"The Foo must be at least 6 characters long."

45

ドキュメントも見たことがありませんが、FormatErrorMessageStringLengthAttributeメソッドは次のようになります。

public override string FormatErrorMessage(string name)
{
    EnsureLegalLengths();
    string format = ((this.MinimumLength != 0) && !base.CustomErrorMessageSet) ? DataAnnotationsResources.StringLengthAttribute_ValidationErrorIncludingMinimum : base.ErrorMessageString;
    return String.Format(CultureInfo.CurrentCulture, format, new object[] { name, MaximumLength, MinimumLength });
}
12
Oundless

予想よりも長いGoogle検索により、確かなリードを得る前にこの古いトピックに私を導いたので、これをここに置いて、同じ立場にいる他の誰にも役立つことを願っています。

MSがGitHubに配置した StringLengthAttribute のコードを調べると、FormatErrorMessageメソッドにあるロジックが確認されます。

// it's ok to pass in the minLength even for the error message without a {2} param since String.Format will just
// ignore extra arguments
return String.Format(CultureInfo.CurrentCulture, errorMessage, name, this.MaximumLength, this.MinimumLength);

したがって、「0」、「1」、および「2」は「プロパティ」の「名前」、「MaximumLength」、および「MinimumLength」にそれぞれ対応します。

同じ方法を他のすべての検証属性に適用して、それに応じてそれらのフォーマットパラメータをチェックできると思います。それ以外の場合、この情報に関する他のドキュメントを見つけることができませんでした。

4
Bo Ngoh