Вы можете использовать Tag
свойство ValidationResult
. «Значение тега определяется клиентским кодом, использующим ValidationResults.»
Если вы используете конфигурацию, вы можете указать тег в файле конфигурации:
<validator lowerBound="0" lowerBoundType="Inclusive"
upperBound="255" upperBoundType="Inclusive" negated="false" messageTemplateResourceName="" messageTemplateResourceType=""
messageTemplate="Oops a warning occurred"
tag="Warning" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="My Validator" />
Или установите тег со свойством:
[StringLengthValidator(5, 50, Ruleset = "RuleSetA", Tag="Warning")]
Если вы хотите сделать это программно, то вам придется создать новый результат проверки, поскольку свойство Tag доступно только для чтения:
ValidationResults newResults = new ValidationResults();
foreach (ValidationResult vr in validationResults)
{
newResults.AddResult( new ValidationResult(
vr.Message, vr.Target, vr.Key, "Warning", vr.Validator, vr.NestedValidationResults ) );
}
Затем в интерфейсе вы можете проверить свойство Tag объекта ValidationResult, чтобы узнать, является ли это предупреждением:
foreach (ValidationResult vr in validationResults)
{
if (string.Compare(vr.Tag, "Warning") == 0)
{
DisplayWarning(vr.Message);
}
else
{
DisplayError(vr.Message);
}
}
Очевидно, вы можете абстрагироваться от этого гораздо лучше, объединить ошибки и предупреждения и т. Д.
ОБНОВЛЕНИЕ
У нас нет идентичных требований к вашим, но мы делаем что-то подобное.К сожалению, единственный известный мне способ выполнения условной проверки, о которой вы говорите, - это использование RuleSets.
Что мы делаем, так это используем соглашение об именах для RuleSets и создаем имена RuleSet во время выполнения.Если RuleSet существует, тогда мы запускаем валидатор.Вы могли бы сделать что-то подобное для ваших предупреждений.Таким образом, вы можете иметь два набора правил:
- RuleSet_Salary_Update
- RuleSet_Salary_Update_Warning
и затем получить список валидаторов на основе того, хотите ли вы запустить проверку предупреждений:
public static List<Validator<T>> CreateValidators<T>(bool shoulIncludeWarning, RuleSetType rulesetType)
{
if (shouldIncludeWarning)
{
// Get warning validator if any
}
// Get Default validator (if any)
}
RuleSetType - это перечисление с различными типами правил (например, Выбрать, Вставить, Обновить, Удалить, PrimaryKey и т. Д.).