2011-01-20 128 views
32

使用MVC3,您有兩種用於添加自定義驗證的新機制。這些是(1)子類ValidationAttribute或(2)實現IValidatableObject。MVC3中的IValidatableObject - 客戶端驗證

ValidationAttribute允許您通過實現IClientValidatable(並通過jQuery註冊新的適配器和方法)相對簡單地添加客戶端驗證。

IValidatableObject更適合於一次性驗證要求,其中重用不是一個選項。它還導致代碼更簡單。因此,我會選擇一些場景。不幸的是,我沒有看到使用這種方法實現客戶端驗證的簡單方法。

所以問題是我錯過了什麼,以及如何在使用IValidatableObject時獲得JS驗證?

回答

23

因爲我沒有得到一個(有效的)答案,所以我問了一些來自微軟的人,他們確認目前不可能。

布拉德·威爾遜:

在這個時候,唯一的財產水平的驗證可以發出客戶端 驗證(爲線,在瀏覽器中的表單的輸入 驗證的想法了好多.. 。從瀏覽器的角度來看,沒有「模型」來說 )。

斯圖爾特韭菜:

我不相信你可以連接客戶端驗證與 IValidatableObject

4

http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx http://blogs.msdn.com/b/stuartleeks/archive/2010/07/28/asp-net-mvc-adding-client-side-validation-to-validatepasswordlengthattribute-in-asp-淨MVC-3-預覽1.aspx

ASP.NET MVC 3,現在榮譽的 IValidateObject接口時,模型 結合(除了所有 其他驗證已靠近它 與MVC 2的支持),並且將 從中檢索到驗證錯誤和 自動標記/突出顯示影響 字段使用內置的HTML表單助手來隱藏視圖。

ASP.NET MVC 3還引入了一個新的 IClientValidatable接口, 允許ASP.NET MVC在 運行時驗證是否具有客戶端驗證 支持探索。該接口已被設計爲使其可以與多種 驗證框架集成。 MVC 3還推出了一個新的IMetadataAware 界面,該界面簡化了您如何爲ModelMetadata 創建過程作出貢獻。

+2

這是所有涉及到增加客戶端驗證,以驗證其屬性作爲我說在我的問題中,工作得很好。我正在詢問是否將客戶端驗證添加到IValidatableObject。 – 2011-01-20 15:26:50

0

這個article描述了一種訪問ASP.NET MVC中客戶端驗證中的容器對象的方法。你可以使用這個來開始使用你自己的客戶端驗證

+1

同樣,這與數據註釋有關,並且是MVC2特定的。在MVC3(IClientValidatable)中爲基於屬性的驗證添加客戶端驗證的機制完全不同,它比舊的DataAnnotationsModelValidator方法更易於實現。但是,我不是在談論屬性,我正在談論其他MVC3驗證方式:IValidatableObject。 – 2011-01-27 11:51:58

+0

@PaulHiles - 嗨保羅,你有沒有找到任何適合客戶端驗證mvc的東西? – 2014-09-11 04:46:24