自定义ValidationAttribute用于多种数据类型

时间:2016-11-15 11:54:05

标签: asp.net-mvc validation

我在下面有一个ValidationAttribute,它验证在表单上输入了一定数量的值。目前,它仅用于类型为short?[]

的属性
public class RequiredArrayLength : ValidationAttribute
    {
        public int TotalRequired { get; set; }

        public override bool IsValid(object value)
        {
            if(value != null)
            {
                var array = value as short?[];
                return array.Where(v => v.HasValue).Count() >= TotalRequired;
            }
            return false;
        }
    }

有没有办法可以修改此ValidationAttribute,以便它可以与其他数字数组一起使用,例如int?[]

1 个答案:

答案 0 :(得分:0)

一种选择是转换为IEnumerableSystem.Collections命名空间)并枚举该集合以确定集合中的项目数。

IEnumerable collection = value as IEnumerable;
if (collection!= null)
{
    IEnumerator enumerator = collection.GetEnumerator();
    int count = 0;
    while(enumerator.MoveNext())
    {
        count++;
    }
    return count >= TotalRequired;
}
return false;

如果您只想计算非空值,请将代码修改为

while(enumerator.MoveNext())
{
    if (enumerator.Current != null)
    {
        count++;
    }
}

如果您特别希望将此限制为仅限数字数据类型,则可以使用.GetType() IEnumerable方法来测试type(例如,C# - how to determine whether a Type is a number