2013-03-04 9 views
10

w sposób ASP.NET MVC 4 aplikacji klasa LocalPasswordModel (w modelach \ AccountModels.cs) wygląda następująco:argumenty podstawienie w ValidationAttribute.ErrorMessage

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

Powyższy kod zawiera dwa argumenty podstawienie w ErrorMessage string:

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

Czy ktoś może mi powiedzieć, skąd pochodzą wartości, które zostaną podstawione w tym łańcuchu? Mówiąc ogólniej, czy istnieje coś zbliżonego do oficjalnej dokumentacji opisującej sposób, w jaki podstawianie parametrów działa w tym kontekście?

Odpowiedz

11

Dla StringLengthAttribute, ciąg wiadomość może trwać 3 argumenty:

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

Parametry te niestety nie wydają się być dobrze udokumentowane. Wartości są przekazywane z każdego atrybutu atrybutu atrybutu FormatErrorMessage. Na przykład, przy użyciu .NET reflektor, tutaj jest to, że metoda z 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 }); 
} 

Jest bezpiecznie założyć, że to nigdy się nie zmieni, bo to właśnie o złamać każdą aplikację, która używa go.

+1

Należy zauważyć, że są one niesprawne - "{0}" to nazwa właściwości, '{1}' to * maksymalna * długość, a '{2}' to * minimalna * długość. (Zobacz wywołanie String.Format w bloku kodu.) – GalacticCowboy

+1

@GalacticCowboy dzięki, naprawiłem to. Najwidoczniej ktoś inny zredagował moją odpowiedź dawno temu i umieścił tam niepoprawny tekst. – Eilon