2012-08-30 17 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同樣適用。但是,當我驗證一個純粹的客戶類,然後它按預期失敗。

任何想法有什麼不對?

感謝

吉日

+1

據我知道你不能像這樣驗證嵌套對象,也許使用自定義驗證器 – saj

+1

默認情況下,數據註釋驗證似乎不運行嵌套對象驗證。 Simmilar post here http://stackoverflow.com/questions/2493800/how-can-i-tell-the-data-annotations-validator-to-also-validate-complex-child-pro –

回答

2

DataAnnotations不會深入到它自己的對象。你有兩個選擇:

1 - 寫一個定製的驗證檢查子屬性

2 - 創建填充視圖模型與簡單性與裝飾數據註解