2011-11-06 28 views
5

我只是在學習MVC,似乎無法弄清楚如何處理以下情況,我有一個帶有送貨地址和帳單地址的表單。各個領域都需要。 「結算地址與送貨地址相同」也有一個複選框。我的問題是,除非兩個地址都完成,否則模型狀態永遠不會有效。我可以很容易地處理這與一些JavaScript,只是將貨運地址的值添加到帳單地址字段,但如果有更好的方法來處理這一點,我想知道。關於如何處理這個問題的任何指導方針都會很棒。謝謝!如何處理MVC3中的條件驗證?

+0

您的帳單和送貨地址是單獨的型號嗎?或者一個模型包裝在一起? – chemicalNova

+0

他們在同一個模型。兩者都是相同類型的屬性。 – Mike

回答

4

有很多方法可以解決這個問題。如果您沒有使用客戶端驗證,那麼您可以簡單地在模型上實現IValidatableObject,並重寫IsValid()方法並執行一些代碼來檢查模型的有效性。

如果您使用的是客戶端驗證,那麼您需要一個自定義屬性,或者使用類似fluent validation的東西。

4

您可以通過創建一個自定義的驗證屬性做到這一點:

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

它的要點是,你創建一個新類based off ValidationAttribute,並IClientValidatable,覆蓋並在必要時實施,添加您的客戶端 - 方面驗證(無論如何您都需要),並將該屬性應用於您的可選字段。

或者由於驗證可以儘可能複雜,因此將其應用於共享部分可選部分必填字段。

這個人也有他正在編寫的庫的alpha,使MVC驗證更靈活。我自己沒用過,但是you could give it a try