2010-12-27 18 views
4

質問hereは似ていますが、ドメインオブジェクトの継承はありません。私のフィールドと検証タグは次の順番になっていますが、MustBe18エラーとRequiredエラーだけが表示されます。このモデルには、さらに多くのバリデーションを含むいくつかのフィールドがありますが、コード内のValidationAttributeの順序は重要ではないようです。リンク先のjfarの答えはヘルパーをビルドできると示唆しているようですが、どうですか?注文をどのように管理できますか?DataAnnotation ValidationAttributeの順序はどのように指定できますか?

[Required(ErrorMessage = "This field is required")] 
[DisplayName("Date of Birth")] 
[MustBeValidDate(ErrorMessage = "Must be a valid date")] 
[MustBe18(ErrorMessage = "You must be 18 years old")] 
[MustNotBeOver100(ErrorMessage = "This caller is too old")] 
public string dob { get; set; } 

MustBe18:ValidationAttribute(オーバーロードさIsValidの方法)

try 
{ 
    DateTime dob = new DateTime(DateTime.Now.AddYears(-18).Year, DateTime.Now.Month, DateTime.Now.Day); 
    return DateTime.Compare(DateTime.Parse(value.ToString()), dob) <= 0; 
} 
catch 
{ 
    return false; 
} 

答えて

3

は、順序を指定する唯一の方法は、属性を注文することができたModelValidatorProvider独自に作成することです。 Orderパラメータを受け取る属性ごとにオーバーロードを作成する必要があるため、これはおそらく難しいでしょう(既に行っているかどうかわかりません)。

検証要約が表示される順序が気になるのであれば、ModelStateのエントリをループしてそこからエラーを吐き出すだけです。

関連する問題