2012-04-02 67 views
0

我使用MVC視圖模型,EF型號第一jQuery驗證在MVC導致問題

我有這也是繼兩個我的我的視圖模型中屬性的問題:

[Required] 
public string TeamName { get; set; } 
[Required] 
public string ConsultantName { get; set; } 

這兩個屬性會根據什麼SubjectTypeName得到禁用用戶選擇

[Required] 
public string SubjectTypeName { get; set; } 

可以說,我選擇SubjectTypeName的價值,我的TeamNameConsultantName被禁用,但是當我想保存表單時,我得到錯誤,因爲我的ModelState.IsValid會被誤認爲是錯誤的。它的[Required],使它"false"

有沒有簡單的解決方案呢?像一個簡單的Jquery代碼,以便從驗證中禁用TeamNameConsultantName,以便我的ModelState.IsValid變成"true"

在此先感謝!

回答

1

您可以查看following blog post,其中說明了如何編寫自定義的驗證屬性,以驗證服務器和客戶端上的條件驗證。您可以直接下載包含此驗證屬性的Mvc.ValidationToolkit

+0

你不再推薦FluentValidation? – 2012-04-02 17:36:23

+0

當然,我正在推薦FluentValidation。很明顯,我甚至不再提及它:-)我有點厭倦重複說實話。 – 2012-04-02 18:20:54

+0

我可以理解:)只是好奇,如果你出於任何原因推遲FV。我自己仍然喜歡它。 – 2012-04-02 18:42:55

0

如果問題出在客戶端,jQuery validate會顯示它。正如你所說,當你檢查ModelState.IsValid時,你的問題在於服務器端的驗證。你需要做的是使用CustomValidations來實現你所需要的。

您可能要檢查this

0

而是標記爲需要(因爲他們不是在某些情況下)的2個屬性的,我將實現IValidatableObject界面,你可以平凡實現這種類型的商業邏輯通過比較幾個屬性的值。

ScottGu對完全是一個博客帖子如何做到這一點:這些方案

http://weblogs.asp.net/scottgu/archive/2010/12/10/class-level-model-validation-with-ef-code-first-and-asp-net-mvc-3.aspx

+1

IValidatableObject不支持客戶端驗證,這可能會導致一些奇怪的結果(例如,頁面未驗證客戶端,修復報告的錯誤,然後獲得服務器端未首次報告的錯誤)。這可能會讓您的用戶煩惱。 – 2012-04-02 17:34:32