验证自定义验证属性

时间:2015-06-01 03:16:45

标签: c# asp.net-mvc validation

使用自定义验证属性,我尝试验证对象列表。课程如下所示:MyClass。在自定义属性中,我能够将object value转换为对象列表,但如何在对象中访问属性IdName

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

我的想法是,在一个属性中验证整个列表会更容易。但是,即使我确实将属性放在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;
    } 
}

1 个答案:

答案 0 :(得分:0)

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

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

}

希望这可能会有所帮助。最好的问候,

相关问题