Аргументы замены в ValidationAttribute.ErrorMessage
В приложении ASP.NET MVC 4 класс LocalPasswordModel (в моделях \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:
ErrorMessage = "The {0} must be at least {2} characters long."
Может ли кто-нибудь сказать мне, откуда берутся значения, которые подставляются в эту строку? В более общем плане, есть ли что-нибудь, приближающееся к официальной документации, описывающей, как работает подстановка параметров в этом контексте?
Ответы
Ответ 1
Для 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 });
}
Можно с уверенностью предположить, что это никогда не изменится, потому что это сломает почти все приложения, которые его используют.