1

我正在構建一個需要多個字段的搜索表單。單選按鈕指示被必填字段輸入像這樣:在特定條件下禁用mvc3客戶端驗證

[ ] Field 1 
[.] Field 2 
    Field 3 
[ ] Field 4 

在上述情況下,Field 2Field 3現在必須的,因爲相關聯的無線電按鈕被選中。爲了實現這一點,我已經實現了RequiredIf驗證屬性,並且它可以正常工作。

我的問題是其他驗證。在這種情況下,Field 1也具有最小長度驗證。如果Field 1具有任何不符合最小長度驗證的值,則表單現在無效並且無法提交。

我需要一種方法來禁用不需要的字段驗證。(也可以將它們設置爲另一個單選按鈕)。

無法將字段設置爲「disabled = disabled」,這可以解決由於客戶端要求而造成的問題。

我已經嘗試刪除data-val屬性或將它們設置爲false上的字段,然後再次解析我的表單,失敗悲慘。

編輯:只要確保。 問題是客戶端驗證

+1

莫非你選擇明確的ModelState錯誤? –

+0

這是我馬上執行的一個好主意。但我仍然希望客戶端驗證正常工作。 – boulaycote

回答

1

請記住有2個驗證發生:客戶端和服務器端。因此,刪除data-val屬性將無濟於事。

現在,在你的模型中,我認爲你正在使用[attributes]來添加這些驗證規則。我不認爲這種方法不會讓你做有條件的驗證。

在這種情況下,FluentValidation可以幫助您。 http://fluentvalidation.codeplex.com/

這是做的相當簡單的,你應該能夠這樣做:在控制器

RuleFor(model => model.Field).NotEmpty().When(model => model.FieldEnabled); 
+0

它看起來很整潔!但是,我不明白它是如何幫助我進行客戶端驗證的問題。 – boulaycote

+0

它會做客戶端和服務器..這就是主意。 –

0

將字段設置爲「禁用」按預期工作。客戶已經改變了他對這個要求的看法。有時候這是最好的解決方案。

這仍然是更好的解決方案。

編輯:

我從來沒有想過尋找在驗證插件文檔。似乎有一些非常有趣的方法可用,如rules ("remove", rules)