私はこのようなものを持っています:
[DisplayName("First Name")]
[Required(ErrorMessage="{0} is required.")]
[StringLength(50, MinimumLength = 10, ErrorMessage="{0}'s length should be between {2} and {1}.")]
public string Name { get; set; }
次の出力が必要です。
ASP.NET MVC2エラーの概要を使用している場合は機能していますですが、手動で検証しようとすると、次のようになります。
ValidationContext context = new ValidationContext(myModel, null, null);
List<ValidationResult> results = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(myModel, context, results, true);
結果は次のとおりです。
どうしましたか?ありがとう。
まあ、やったと思います。
次のような別の属性を作成する必要がありました。
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
private String displayName;
public RequiredAttribute()
{
this.ErrorMessage = "{0} is required";
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var attributes = validationContext.ObjectType.GetProperty(validationContext.MemberName).GetCustomAttributes(typeof(DisplayNameAttribute), true);
if (attributes != null)
this.displayName = (attributes[0] as DisplayNameAttribute).DisplayName;
else
this.displayName = validationContext.DisplayName;
return base.IsValid(value, validationContext);
}
public override string FormatErrorMessage(string name)
{
return string.Format(this.ErrorMessageString, displayName);
}
}
そして私のモデルは:
[DisplayName("Full name")]
[Required]
public string Name { get; set; }
ありがたいことに、このDataAnnotationは拡張可能です。
[DisplayName]
属性を使用する代わりに(またはおそらく組み合わせて)、[Display]
のSystem.ComponentModel.DataAnnotations
属性を使用します。そのName
プロパティにデータを入力します。
これにより、組み込みの検証属性またはカスタム属性をValidationContext
のDisplayName
で使用できます。
例えば。、
[Display(Name="First Name")] // <-- Here
[Required(ErrorMessage="{0} is required.")]
[StringLength(50, MinimumLength = 10, ErrorMessage="{0}'s length should be between {2} and {1}.")]
public string Name { get; set; }