[英]Validate a list in a custom validation attribute
使用自定义验证属性,我试图验证对象列表。 该类如下所示: MyClass
。 在自定义属性中,我可以将object value
隐藏到object value
列表中,但是如何访问对象中的属性, Id
和Name
?
我知道我可以将属性直接放在MyClass
属性上,但是在验证之前我需要检查几件事。 首先,我需要检查列表中的项目数是否大于一个。 然后,如果计数大于1,则需要检查Id
和Name
是否均为空。
我的想法是,在一个属性中验证整个列表会更容易。 但是,即使确实将属性放在MyClass
属性上,我仍然需要访问列表中的值。
如果将列表作为IsValid
的value
参数传递,则所有列表项都将在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.