验证自定义验证属性中的列表
本文关键字:验证 列表 属性 自定义 | 更新日期: 2023-09-27 17:51:15
使用自定义验证属性,我正在尝试验证对象列表。类如下所示:MyClass
。在自定义属性中,我可以将object value
转换为对象列表,但如何访问对象中的属性Id
和Name
?
我知道我可以将属性直接放在MyClass
属性上,但在验证之前我需要检查几件事。首先,我需要检查列表中的项目数是否大于1。然后,如果计数大于1,我需要检查Id
和Name
是否都为空。
我的想法是,在一个属性中验证整个列表会更容易。但是,即使我确实将属性放置在MyClass
属性上,我仍然需要访问列表中的值。
如果列表作为IsValid
的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);
}
希望这能有所帮助。致问候,