2011-08-24 57 views
1

我已經從JSON反序列化的一個視圖模型看起來是這樣的:ASP.Net MVC 3個DataAnnotations驗證列表<T>

public class UserThingsUpdateViewModel 
{ 
    public IList<Thing> Things { get; set; } 
    [Required] 
    public int UserId { get; set; } 
    public int Age { get; set; } 
} 

Thing也是一個ViewModel其中也有各種DataAnnotaion ValidationAttribute的性能屬性。

問題是,列表似乎沒有得到驗證,甚至在通過搜索後,我似乎無法找到任何解決此問題的文章。大多數人認爲如果ViewModel包含一個列表,它就是錯誤的。

那麼,驗證我的列表並將模型錯誤添加到模型狀態的最佳方法是什麼?

回答

0

你可以寫一個自定義的驗證器屬性,並用它來裝飾列表屬性?這將允許您編寫自定義邏輯以將元素從列表中取出並驗證它們。

+0

有關自定義驗證屬性的更多信息 - http://www.squarewidget.com/post/2011/06/Simple-and-Custom-Validation-in-MVC-3.aspx –

+0

但是,如何調用模型驗證模型已經被綁定了。 – Dve

2

之前檢查ModelState.IsValid,你可以加入一些代碼來逐步和驗證每個Thing,具體如下:

foreach (var thing in Things) 
    TryValidateModel(thing); 

這將驗證每個項目,並添加任何錯誤的ModelState。

+0

謝謝,這就是我作爲一個計劃b!我希望有一個更優雅的解決方案 – Dve

+1

DVE,我必須同意,這不是一個優雅的解決方案。但有時候,我不想在牆壁上打我的頭,試圖達到優雅的解決方案...有時。 – counsellorben

+0

哈哈明智的話,我想我將不得不承認失敗..現在 – Dve