15

ASP.NET MVC 4アプリでは、LocalPasswordModelクラス(Models \ AccountModels.cs内)は次のようになります。

public class LocalPasswordModel
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

上記のコードには、ErrorMessage文字列に2つの置換引数が含まれています。

ErrorMessage = "The {0} must be at least {2} characters long."

その文字列に代入される値がどこから来ているのか誰かに教えてもらえますか?より一般的には、このコンテキストでパラメータ置換がどのように機能するかを説明する公式ドキュメントに近いものはありますか?

4

1 に答える 1

18

StringLengthAttributeの場合、メッセージ文字列は3つの引数を取ることができます。

{0} Property name
{1} Maximum length
{2} Minimum length

残念ながら、これらのパラメータは十分に文書化されていないようです。値は、各検証属性のFormatErrorMessage属性から渡されます。たとえば、.NET Reflectorを使用すると、次のメソッドが使用されますStringLengthAttribute

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

これを使用するほぼすべてのアプリが機能しなくなるため、これが変更されることはないと想定しても問題ありません。

于 2013-03-04T02:07:43.077 に答える