【发布时间】:2015-06-21 14:06:05
【问题描述】:
使用自定义验证属性,我正在尝试验证对象列表。该类如下所示:MyClass。在自定义属性中,我可以将object value 转换为对象列表,但是如何访问对象中的属性Id 和Name?
我知道我可以将属性直接放在 MyClass 属性上,但在验证之前我需要检查几件事。首先,我需要检查列表中的项目数是否大于一个。然后,如果计数大于一,我需要检查 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; }
}
【问题讨论】:
标签: c# asp.net-mvc validation