Asp.net mvc 多数据类型的自定义ValidationAttribute
我有一个类似下面的Asp.net mvc 多数据类型的自定义ValidationAttribute,asp.net-mvc,validation,Asp.net Mvc,Validation,我有一个类似下面的ValidationAttribute,它验证在表单上输入了一定数量的值。目前,它仅用于类型为short?[] public class RequiredArrayLength : ValidationAttribute { public int TotalRequired { get; set; } public override bool IsValid(object value) { if(
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?[
)一起工作?一个选项是强制转换到IEnumerable
(System.Collections
命名空间)并枚举集合以确定集合中的项数
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;
}
}
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++;
}
}
如果您特别想将其限制为仅数字数据类型,则可以使用
IEnumerable
的.GetType()
方法来测试类型(例如,)。一个选项是强制转换到IEnumerable
(系统.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++;
}
}
如果您特别想将其限制为仅数字数据类型,则可以使用IEnumerable
的.GetType()
方法来测试类型(例如,)。上述方法是否处理空数据类型?是的,如果值
是[2,null,4]
,count
的结果将是3如果您只想计算非空值,那么您可以使用if(enumerator.Current!=null){count++;}
以上是否处理空数据类型?是的,如果value
是[2,null,4]
,如果您只想计算非空值,count
的结果将是3,然后,如果(enumerator.Current!=null){count++;}