c# - 如何根据 DataAnnotation 中的另一个属性验证一个属性

标签 c# c#-4.0 data-annotations

考虑我有这两个属性:

public class Test
{
    [Required(ErrorMessage = "Please Enetr Age")]
    public System.Int32 Age { get; set; }
    [Required(ErrorMessage = "Choose an option")]
    public System.Boolean IsOld { get; set; }
}

当用户为 Age 输入例如 15 并为 IsOld 选择“Yes”时,我返回一个正确的异常 年龄IsOld。我为此使用了 CustomValidation,但因为我的验证必须是静态的,所以我无法访问其他属性。如何通过 DataAnnotation 执行此操作?

最佳答案

您可以向类本身添加数据注释(自定义验证器)。在验证属性的 isValid 方法中,您应该能够转换对象并测试需要实现的值。

例子:

using System;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // setup test object
            Test t = new Test() { Age = 16, IsOld = true };
            // store validation results
            Collection<ValidationResult> validationResults = new Collection<ValidationResult>();
            // run validation
            if (Validator.TryValidateObject(t, new ValidationContext(t, null, null), validationResults, true))
            {
                // validation passed
                Console.WriteLine("All items passed validation");
            }
            else
            {
                // validation failed
                foreach (var item in validationResults)
                {
                    Console.WriteLine(item.ErrorMessage);
                }
            }
            Console.ReadKey(true);
        }
    }

    [TestValidation(ErrorMessage = "Test object is not valid")]
    public class Test
    {
        public int Age { get; set; }
        public bool IsOld { get; set; }
    }

    public class TestValidation : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            bool isValid = false;
            Test testVal = value as Test;
            if (testVal != null)
            {
                // conditional logic here
                if ((testVal.Age >= 21 && testVal.IsOld) || (testVal.Age < 21 && !testVal.IsOld))
                {
                    // condition passed
                    isValid = true;
                }
            }
            return isValid;
        }
    }
}

关于c# - 如何根据 DataAnnotation 中的另一个属性验证一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283968/

相关文章:

c# - 从文本框中获取特定值到 GridView ?

c# - 具有 OleDB 连接的 Entity Framework - 我只是疯了吗?

c# - 通用 with where 子句需要显式转换

c# - 如何在 C# 中获取表的 innerHTML

c# - 为什么 C# 动态类型是静态的?

c# - 2 个应用程序之间共享的对象模型的数据注释

asp.net - ValidationAttribute 类的 RequiresValidationContext 属性有什么用?

entity-framework - EF5 Code First - 数据注释与 Fluent API

c# - 使用 Entity Framework 将集合另存为 JSON

C# WPF XAML 在 UserControl 加载上运行 XAML 命令