繼本文之后,對定制屬性執(zhí)行客戶端驗證我正在嘗試將方法傳遞給客戶端腳本,以了解如何執(zhí)行此操作據(jù)我了解,到目前為止,要使用MVC 3實現(xiàn)自定義驗證,需要執(zhí)行以下操作創(chuàng)建一個自定義驗證屬性基于ValidationAttribute并實現(xiàn)IClientValidatable。我還看到了一些來自ModelValidator的示例,該示例似乎實現(xiàn)了ValidationAttribute和IClientValidatable的功能。所以這是我的第一點困惑,是關(guān)于差異是什么,還是在MVC 2中使用了ModelValidator,但現(xiàn)在不贊成使用它還是什么?必須從GetClientValidationRules()返回ModelClientValidationRule的實例,以指定詳細信息,例如錯誤消息,ValidationType(我理解為將執(zhí)行客戶端驗證的Javascript函數(shù)的名稱)以及該屬性的任何其他自定義參數(shù)可能有,并且需要傳遞給Javascript驗證。我假設(shè)運行時(不確定它的哪一部分)然后使用ModelClientValidationRule來在標(biāo)記元素中生成html屬性,如下所示:data-val="true" (to indicate that the element requires validation)data-val-[ValidationType]=[ErrorMessage]data-val-[ValidationType].[ValidationParameters(n).Key]=[ValidationParameters(n).Value]實現(xiàn)客戶端驗證邏輯必須創(chuàng)建一個Javascript函數(shù),并使用jQuery.validators.addmethod()將其添加到j(luò)Query.validators中,以便JQuery在需要執(zhí)行時就知道它。就像是:jQuery.validator.addMethod( 'greaterThan', function (value, element, params) { /.../ return /* true or false */ ; }, ''); 我的問題是,簽名“函數(shù)(值,元素,參數(shù))”是否為處理驗證方法的標(biāo)準(zhǔn),我認為某些jQuery功能會在適當(dāng)?shù)臅r間(例如,在提交表單之前或提交表單時)調(diào)用該函數(shù)。元素松動或在keyUp事件上。我只是不了解如何控制此事件,即選擇哪個事件適合您的自定義驗證。實施不干擾的適配器這會將不干擾的屬性轉(zhuǎn)換為;我不太清楚這件事,但是假設(shè)它是jQuery規(guī)則,但是我不清楚它們是如何工作的。就像是jQuery.validator.unobtrusive.adapters.add( 'futuredate', { }, function (options) { options.rules['greaterThan'] = true; options.messages['greaterThan'] = options.message; }); 我的問題是關(guān)于“功能(選項)”。這是將在“功能(值,元素,參數(shù))”之前調(diào)用的功能,該功能負責(zé)將不引人注目的標(biāo)簽提取到j(luò)Query.Validation可以理解的數(shù)據(jù)結(jié)構(gòu)中。從代碼示例中,在我看來,options是一個對象,其中包含標(biāo)簽的屬性值(例如options.message)和它必須映射到的jQuery相關(guān)屬性(例如options.messages ['ClientSideValidationFunctionName']如果是這樣,如何檢索和映射自定義參數(shù)。我希望我不會再增加任何混亂。
3 回答

鳳凰求蠱
TA貢獻1825條經(jīng)驗 獲得超4個贊
ModelValidator方法來自MVC2,在我看來,今后不應(yīng)在MVC3項目上使用該方法。MVC3 ValidationAttribute / IClientValidatable方法更加簡潔,并且不涉及修改global.asax來注冊適配器。
- 3 回答
- 0 關(guān)注
- 412 瀏覽
添加回答
舉報
0/150
提交
取消