【问题标题】:Data Annotation Validation returns wrong result数据注释验证返回错误结果
【发布时间】:2015-10-29 01:53:34
【问题描述】:

这是我的整个程序。我希望它返回false,但结果是true。我是否期望错误的结果或我在这里做错了什么?

using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel.DataAnnotations;


public class Program
{
    public static void Main()
    {
        var c = new Ax(){Id = 1000, Name = "A"};
        //c.Name = null; // when un-comment this, result as expected  
        var context = new ValidationContext(c);
        var isValid = Validator.TryValidateObject(c, context, null);

        Console.WriteLine(isValid);
    }


    public class Ax  
    {
        [Range(1,100)] // I expect this to cause failed validation
        public int Id{get; set;}
        [Required]
        public string Name { get; set; } 
    }
}

结果:真

【问题讨论】:

    标签: c# .net validation data-annotations


    【解决方案1】:

    你正在使用这个方法:

    Validator.TryValidateObject(Object, ValidationContext, ICollection<ValidationResult>)
    

    这个method 评估每个ValidationAttribute 实例 附加到对象类型。它还检查每个属性是否 标有RequiredAttribute 提供。 不递归 验证对象的属性值。

    您应该使用另一个overload 并将true 作为第三个参数传递:

    Validator.TryValidateObject (Object, 
                                 ValidationContext, 
                                 ICollection<ValidationResult>, Boolean)
    

    【讨论】:

    • 请解释一下,我不想验证每个验证属性吗?
    • 你想要的。您使用的方法仅使用类上方的属性验证对象。如果你想使用属性上面的属性来验证对象,你应该使用另一个重载。
    • 知道了 - 谢谢。之前没用过——菜鸟的错误
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多