2012/12/07

20121207-程式-[JQuery]Unobtrusive Client Side Validation 無法發揮功能

果然睡過一覺後,再來看這問題,就這樣出現曙光!解決此問題。
(昨天是連有篇解答在前面,還是看不懂它怎麼寫)

解答:說明了Client Side Validate 的原理
http://blog.darkthread.net/post-2011-08-02-unobtrusive-jq-vald-dynamic.aspx
(它寫到動態加入Control並可以驗証,"data-val-number"/"data-val-required")

我的最後結果圖:


經歷過程:

因這查詢頁面是 User Control (ascx)
所以於主頁面,動態加入這個Control 元件,

若是用正規的 Html.Partial(~~)寫法,是可以觸發它的 Client Side Validate。
(但它載入的時間順序,難控制,變成我User Control 要用的 ViewBag全都要在Index準備好~)

後來改寫成用動態載入的方式寫:

 //初始元件:載入查詢元件
            $("#queryControl").load('<%:Url.Action("RejectQuery") %>', function () {
             });

再來問題就出現了!
我無法再有Client Side Validate 功能,直接post 到Controller 做事情。

這個問題,我找了一天 @@

其實,應去了解它Client Side Validate 機制做法,
它是透過以下來達成的:






而黑大就寫:
「以此推論,除非form本身尚未建立.data(“validator”),否則呼叫.validate(options)不會有任何效果。但在jquery.validate.unobtrusive.js中,網頁載入時就已對既有
做過.validate(),也都已建立validator物件」


所以就是:
先Remove form 的 validator,再重新自已加入。

所以在 ascx 下直接寫:

   $(function () {
            $("form").removeData("validator");
            $.validator.unobtrusive.parse("form");
        });


最後就可以驗証了!!


至於「"data-val-number"/"data-val-required"」這類東西

可再參考:
http://blog.darkthread.net/post-2011-07-27-unobtrusive-jquery-validation.aspx







0 意見 :

張貼留言