這是joedotnot的有用的代碼擴展。對於大多數asp.net用戶來說,這可能是矯枉過正的,但是這對於一個項目有所幫助,在這個項目中驗證組的不同組合必須應用於提交,具體取決於哪些按鈕已被選中。
var validationManager = function() {
// Manual client-side validation of Validator Groups
// an empty string('') is default - to validate controls without a validation group
var valGroups = [''],
returnObj = { //define methods
set: function (/*string argument list*/) {
valGroups = Array.prototype.slice.call(arguments);
return returnObj;
},
add: function (/*string argument list*/) {
var i;
for (i = 0; i < arguments.length; i++) {
if (valGroups.indexOf(arguments[i]) === -1) {
valGroups.push(arguments[i]);
}
}
return returnObj;
},
remove: function (/*string argument list*/) {
var i = 0, n = 0;
for (i = 0; i < arguments.length; i++) {
var n = valGroups.indexOf(arguments[i]);
if (n > -1) valGroups.splice(n, 1);
}
return returnObj;
},
validate: function() {
var i = 0,
summariesToDisplay = [];
for (; i < valGroups.length; i++) {
if (!Page_ClientValidate(valGroups[i])) { //this will display the contents of the validator
summariesToDisplay.push(valGroups[i]);
}
}
if (!summariesToDisplay.length) { return true; }
for (i = 0; i < Page_ValidationSummaries.length; i++) { //make relevant summaries visible
if (summariesToDisplay.indexOf(Page_ValidationSummaries[i].validationGroup || '') > -1) {
Page_ValidationSummaries[i].style.display = "inline"; //"none"; "inline";
}
}
return false;
}
};
if (arguments.length > 0) {
returnObj.set.apply(null, arguments);
}
return returnObj;
}
然後在不同的事件處理程序:
//set up a global object
var validateOnSubmit = validationManager('','BMIvalGrp');
//within a radio click handler
validateOnSubmit.add('weightValGrp','ageValGrp')
.remove('BMIvalGrp');
//added to submit button handlers
validateOnSubmit.validate();
我無法回答這個問題,因爲我還沒有嘗試過。但驗證器可以在客戶端觸發/管理。嘗試閱讀http://msdn.microsoft.com/en-us/library/aa479045.aspx(儘管日期爲2002年),它最近幫助我解決了驗證問題。 – 2009-10-13 15:12:51
好的,謝謝你的msdn鏈接,因爲你說的是過時的,但是很好的背景噪音(信息),這幫助我找到答案。 – joedotnot 2009-10-14 01:53:21
我有類似的情況,我的問題是驗證摘要調用兩次,如果兩組都失敗。 – 2012-09-17 13:01:53