2012-08-30 10 views
6

は、DataAnnotationを使用してASP.NET MVC4で複雑なクラスの検証に問題が発生しました。ASP.NET MVC4での複雑なクラスの検証に失敗しました。

その後、私は私のコントローラでは、このモデルのインスタンスを検証しようとする者は、次のモデル(簡体字)

public class Customer 
{ 
    [Required] 
    [StringLength(8, MinimumLength = 3)]   
    public string UserName { get; set; } 

    [Required] 
    [StringLength(8, MinimumLength = 3)] 
    public string DisplayName { get; set; } 
} 


public class Order 
{ 
    public Customer customer { get; set; } 
} 

てみましょう:

// CREATE A DUMMY INSTANCE OF THE MODEL 
Customer cust = new Customer(); 
cust.UserName = "x"; 
cust.DisplayName = "x"; 

Order orderModel = new Order(); 
orderModel.customer = cust; 

// VALIDATE MODEL 
TryValidateModel(orderModel); // ModelState.IsValid is TRUE (which is incorrect) 
TryValidateModel(cust); // ModelState.IsValid is FALSE (whic is correct} 

orderModelの検証がcust.UserNameとして失敗します1文字のみですが、3つはモデルで必要です。同じcust.DisplayNameに適用されます。しかし、純粋なCustomerクラスを検証すると、期待通りに失敗します。

何が悪いと思いますか?

おかげ

智異

+1

限りデータの注釈で飾られたシンプルな性質を持つ人口を持つビューモデルを作成します。そのようなネストされたオブジェクトを検証することはできません。おそらくカスタムバリデーターを使用します。 – saj

+1

データアノテーションの検証では、デフォルトでネストされたオブジェクトの検証が実行されないようです。シムミラーの投稿はこちらhttp://stackoverflow.com/questions/2493800/how-can-i-tell-the-data-annotations-validator-to-also-validate-complex-child-pro –

答えて

2

DataAnnotationsは、それ自身の上のあなたのオブジェクトに掘ることはありません。次の2つの選択肢があります。

1 - 子プロパティ

をチェックするためのカスタムバリデータを書く

2 - 私はあなたを知っているよう

関連する問題