«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Реализовать проверку условия yalyDatableObject: уровень атрибута и невежество сценариев

Реализовать проверку условия yalyDatableObject: уровень атрибута и невежество сценариев

Опубликовано в 2025-04-16
Просматривать:438

How to Implement Conditional Validation in IValidatableObject with Property-Level Attributes and Scenario-Based Ignoring?

Реализуйте условную проверку в IvalidatableObject: характеристики уровня атрибута и невежество на основе сценария

]

вопрос:

я знаю ilividableObject можно использовать для выполнения проверки объекта при сравнении свойств. Тем не менее, я хочу использовать свойства для проверки одного свойства и в некоторых сценариях, которые игнорируют определенные свойства. Моя следующая реализация неверна?

]
public class ValidateMe : IValidatableObject
{
    [Required]
    public bool Enable { get; set; }

    [Range(1, 5)]
    public int Prop1 { get; set; }

    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable Validate(ValidationContext validationContext)
    {
        if (!this.Enable)
        {
            // 在此处返回有效结果。
            // 如果整个对象未“启用”,我不关心 Prop1 和 Prop2 是否超出范围
        }
        else
        {
            // 在此处检查 Prop1 和 Prop2 是否满足其范围要求
            // 并相应地返回。
        }
    }
}

Отвечать:

предоставленная реализация может быть улучшена для достижения требуемой условной проверки. Вот альтернатива:

]
public class ValidateMe : IValidatableObject
{
    [Required]
    public bool Enable { get; set; }

    [Range(1, 5)]
    public int Prop1 { get; set; }

    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable Validate(ValidationContext validationContext)
    {
        var results = new List();
        if (this.Enable)
        {
            Validator.TryValidateProperty(this.Prop1,
                new ValidationContext(this, null, null) { MemberName = "Prop1" },
                results);
            Validator.TryValidateProperty(this.Prop2,
                new ValidationContext(this, null, null) { MemberName = "Prop2" },
                results);

            // 其他一些随机测试
            if (this.Prop1 > this.Prop2)
            {
                results.Add(new ValidationResult("Prop1 必须大于 Prop2"));
            }
        }
        return results;
    }
}

, используя validator.tryvalidateproperty () , результат проверки добавляется в , что приводит к коллекции только при сбое проверки. Если проверка будет успешной, ничего не будет добавлено, что указывает на успех.

]

выполнить проверку:

public void DoValidation()
{
    var toValidate = new ValidateMe()
    {
        Enable = true,
        Prop1 = 1,
        Prop2 = 2
    };

    bool validateAllProperties = false;

    var results = new List();

    bool isValid = Validator.TryValidateObject(
        toValidate,
        new ValidationContext(toValidate, null, null),
        results,
        validateAllProperties);
}

настройка validateallproperties to false гарантирует, что только свойства с [требуется] атрибут, что позволяет справиться с методом ivalidobject.validate () для обработки условий.

]

Этот пересмотренный ответ поддерживает исходное изображение и обеспечивает более краткое и точное объяснение примера кода, сосредотачиваясь на улучшениях ключевых и разъяснения цели validateallproperties . Кодовые блоки также отформатированы для лучшего чтения.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3