如果你检查
RequiredAttribute
在里面
reference source
,您将看到overriden
IsValid
方法如下:
public override bool IsValid(object value)
{
// checks if the object has null value
if (value == null)
{
return false;
}
// other stuff
return true;
}
这里的问题是
有效的
方法只检查空值和空对象,但不检查
Count
集合对象中存在的属性,例如
IEnumerable<T>
. 如果你想核对零值
伯爵
属性(表示没有选定项),需要创建继承自的自定义批注属性
必需的属性
包含
IEnumerator.MoveNext()
检查并应用于
List<T>
财产:
[AttributeUsage(AttributeTargets.Property)]
public sealed class RequiredListAttribute : RequiredAttribute
{
public override bool IsValid(object value)
{
var list = value as IEnumerable;
// check against both null and available items inside the list
return list != null && list.GetEnumerator().MoveNext();
}
}
// Viewmodel implementation
public class ViewModel
{
[RequiredList(ErrorMessage = "Please select a member")]
public List<int> Members { get; set; }
}
注:
使用
int[]
数组类型而不是
List<int>
例如
public int[] Members { get; set; }
应该符合标准
必需的属性
因为数组属性返回
null
当没有选择任何项时,而
列表& T;
属性调用将创建空列表的默认构造函数。
相关问题:
Required Attribute on Generic List Property