Мой ответ ниже основан на предположении, что условие для валидаторов для оценки отличается от условия для элемента управления вводом / валидаторов, которые должны быть представлены.
Существует стандартная функция JavaScript, которая называется ValidatorValidate
, когда вы используете проверку в веб-формах. Вам нужно переопределить это, используя пример кода, как показано ниже, для реализации вашего требования.
Важным моментом, который следует иметь в виду в этом решении, является размещение приведенного ниже кода непосредственно перед закрывающим тегом тела, чтобы перезаписываемая функция уже была загружена в браузер, иначе вы можете получить ошибку JavaScript, сообщающую, что window.ValidatorValidate не определено .
Кроме того, реализуйте то же требование на стороне сервера, используя приведенный ниже код C #, поскольку валидаторы оцениваются как на стороне клиента, так и на стороне сервера.
Переопределить функцию ValidatorValidate в JavaScript
<script type="text/javascript">
//create a condition in JavaScript for your validators to validate
//make condition a global variable, like here ( don't set it inside a function)
var condition = ...; //write your condition code on right side of equal operator
//populate this array with client ID's of all validators for which you want to conditionally validate
var conditionalValidatorIds = [];
conditionalValidatorIds.push("<%= validator1.CleintID%>";
conditionalValidatorIds.push("<%= validator2.CleintID%>";
conditionalValidatorIds.push("<%= validator5.CleintID%>";
//now override the standard ValidatorValidate function
var originalValidatorValidate = window.ValidatorValidate;
window.ValidatorValidate = function (val, validationGroup, event) {
//check if the condition is true and if yes then skip this function for all
//validators within the conditionalValidatorIds array
if(condition === true) {
for(var i=0; i < conditionalValidatorIds.length; i++) {
if( val.id === conditionalValidatorIds[i] ) {
val.isvalid = true;
ValidatorUpdateDisplay(val);
return;
}
}
}
//perform original validation when condition is false
window.originalValidatorValidate(val, validationGroup, event);
}
</script>
C # код для переопределения оценки валидаторов на стороне сервера
public override void Validate(string validationGroup)
{
//you will need to define yourCondition on server-side
bool enableValidators = (someCondition === true);
//then enable/disable your validators based on above condition
validator1.Enabled = enableValidators;
validator2.Enabled = enableValidators
validator3.Enabled = enableValidators;
base.Validate(validationGroup);
}
Другой вариант, вместо использования описанного выше подхода - определять только пользовательские валидаторы (без стандартных валидаторов, таких как requiredfieldvalidator или comparevalidator и т. Д.) В блоке условия if, а затем в каждой пользовательской функции валидатора на стороне клиента, просто проверьте условие и, если оно истинно, укажите args.IsValid = true;
в нем. Сделайте то же самое для событий на стороне сервера, которые вы используете для этих пользовательских валидаторов.