2012-03-23 50 views
2

我正在使用MVC3,EF模型第一。MVC&Jquery驗證:已禁用Dropdownlists得到驗證,如何使它不會發生

我有兩個DropDownList的殘疾取決於用戶在另一個下拉列表選擇什麼樣的價值得到,我使用jQuery的這種這裏形式的代碼:

$(function() { 
    $('#SubjectTypeName').change(function() { 
     var value = $(this).val(); 
     if (value == '2') { 
      $('#TeamName, #ConsultantName').removeAttr('disabled'); 
     } else if (value == '3') { 
      $('#TeamName').attr('disabled', 'disabled'); 
      $('#ConsultantName').attr('disabled', 'disabled'); 
     } else if (value == '4') { 
      $('#TeamName').attr('disabled', 'disabled'); 
      $('#ConsultantName').attr('disabled', 'disabled'); 
     } 

     $(".questionsForSubjectType").hide(); 
     $("#questionsForSubjectType_" + value).show(); 
    }); 

}) 

但是當DropDownList中被禁用我點擊下一頁,禁用的DropDownLists通過我擁有的MVC標準Jquery驗證進行驗證。我通過在我的ViewModel的屬性中聲明[Required]來完成驗證,以進行驗證。我怎樣才能防止我禁用的DropDownlists驗證,但仍然確保DropDownLists得到驗證,如果他們啓用

在此先感謝!

+0

一個不雅的解決方案:當您禁用DDL時,將其屬性設置爲「禁用驗證」或「僅用於驗證黑客」。你的服務器端邏輯應該知道不要使用它。你可以修改我的示例http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx重現該問題嗎?然後張貼簡單的項目,並要求更優雅的soln。 – RickAndMSFT 2012-03-23 16:50:05

+0

嗨Rick,我找到了一個可行的解決方案,當我回家時我會發布它。我只是簡單地做了一個Jquery函數來驗證我的表單,如果聲明沒有驗證「Disabled」。你看到解決這個問題的不正確方法嗎? – Obsivus 2012-03-23 17:29:16

回答

0

[Required]屬性是否在下拉菜單中設置?如果是這樣的話,也許刪除它可能會有所幫助。

您也可以考慮根據用戶輸入填充部分視圖。

+0

謝謝我使用了[RequiredIf],現在它完美地工作! – Obsivus 2012-04-12 06:29:20

0

MVC驗證發生在客戶端還是服務器端? 在服務器端,你可以檢查是否使用dropdown_A,ModelState.Remove("dropdown_B");那麼你的ModelState.IsValid將是真實的。

+0

服務器端,但我們希望這樣做只有在禁用下拉列表時纔會刪除。 n – Obsivus 2012-03-23 09:55:27