使用自定义验证属性,我尝试验证对象列表。课程如下所示:MyClass
。在自定义属性中,我能够将object value
转换为对象列表,但如何在对象中访问属性Id
和Name
?
我知道我可以将属性直接放在MyClass
属性上,但我需要在验证之前检查一些事情。首先,我需要检查列表中的项目数是否大于1。然后,如果计数大于1,我需要检查Id
和Name
是否都为空。
我的想法是,在一个属性中验证整个列表会更容易。但是,即使我确实将属性放在MyClass
属性上,我仍然需要访问列表中的值。
如果列表作为value
的{{1}}参数传递,则所有列表项都在值内。如果我将属性放在IsValid
属性上,我需要以另一种方式获取值。我已经能够使用下面的代码获得单个值,但我无法获得值列表。
结论:我需要一种方法来访问列表中的所有值,可以是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;
}
}
答案 0 :(得分:0)
业务逻辑有点不清楚,因此,基于合格的猜测,解决方案可能如下。假设您有_lst = List<MyClass>
,那么您可以遍历列表并将验证规则(例如,方法ValidateID()
和ValidateName()
)应用于这两个属性:
foreach (MyClass _mc in _lst)
{
ValidateID (_mc.Id);
ValidateName (_mc.Name);
}
希望这可能会有所帮助。最好的问候,