繁体   English   中英

验证自定义验证属性中的列表

[英]Validate a list in a custom validation attribute

使用自定义验证属性,我试图验证对象列表。 该类如下所示: MyClass 在自定义属性中,我可以将object value隐藏到object value列表中,但是如何访问对象中的属性, IdName

我知道我可以将属性直接放在MyClass属性上,但是在验证之前我需要检查几件事。 首先,我需要检查列表中的项目数是否大于一个。 然后,如果计数大于1,则需要检查IdName是否均为空。

我的想法是,在一个属性中验证整个列表会更容易。 但是,即使确实将属性放在MyClass属性上,我仍然需要访问列表中的值。

如果将列表作为IsValidvalue参数传递,则所有列表项都将在value范围内。 如果将属性放在MyClass属性上,则需要以其他方式获取值。 我已经可以使用下面的代码获取单个值,但无法获取值列表。

底线:我需要一种从object value参数或ValidationContext validationContext参数访问列表中所有值的方法。

获取单个值(而不是值列表):

var property = validationContext.ObjectType.GetProperty("MyProperty");
var value = property.GetValue(validationContext.ObjectInstance, null);

自定义属性:

public sealed class ValidateNewSauList : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var myList = value as IList;
    } 
}

这是用户定义的类:

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

业务逻辑有点不清楚,因此,仅根据合格的猜测,解决方案可能如下。 假设您具有_lst = List<MyClass> ,则可以遍历列表并将验证规则(例如,称为ValidateID()ValidateName() )应用于这两个属性:

foreach (MyClass _mc in _lst)
{
   ValidateID (_mc.Id);
   ValidateName (_mc.Name);

}

希望这会有所帮助。 最好的祝福,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM