2011-07-20 39 views
0

我們在當前的應用程序實現中嚴重依賴於使用MicrosoftMvcValidation.debug.js的客戶端驗證。如何在運行時動態添加/刪除ASP.NET MVC中的驗證器?

我們在數據庫中定義了表單元素和表單驗證器,並在運行時從數據庫加載。我們有視圖模型屬性Answer1,Answer2,Answer3等等,到目前爲止所有的字段都是必需的,所以我們每個都有[Required]屬性,但是現在我們需要在運行時根據數據庫設置應用這個需要的註解因爲一些問題是可選的。

我不想自己做任何重新實現驗證器,我只想在運行時動態刪除[Required]屬性和/或它們的效果,或者在運行時動態添加它們。

使用ASP.NET MVC 2

回答

3

將[必需]屬性添加到可能需要的任何字段。只要你不綁定一個控制客戶端,你將繞過客戶端驗證沒有問題。在服務器端回傳操作中,循環訪問ModelState(它實現了IDictionary)並清除ModelState上您想繞過的驗證器的錯誤。

foreach(var validator in ModelState){ 
    if(validator.Key == "Validator_To_Bypass") 
     validator.Value.Errors.Clear(); 
} 
0

似乎可以創建一個自定義的類繼承ValidationAttribute可以在運行時驗證是如何或是否做了決定。這是完成這一要求的一種方式。

+0

有一個更好的辦法,你在做什麼。現在不能回答,因爲它相當長。今晚將發佈代碼。 – jfar

+0

@jfar 2年後,我很好奇你計劃發佈的內容。針對與MVC4相同的問題運行:http://stackoverflow.com/questions/18919758/dynamically-apply-validation-rules-at-runtime-with-asp-net-mvc-4 – joelmdev

+0

@ jm2我通過您的電子郵件發送給您您的網站上的聯繫頁面。 – jfar

相關問題