[英]Validating a List<T> To ensure list contains at list one Item with Data Annotations MVC C#
我正在尝试验证一个通用列表,例如List<Sales>
以便该列表应包含至少一个通过复选框添加的项目。
这是我尝试的方法:
public class SalesViewModel :IValidatableObject
{
[Required]
public List<Sales> AllSales{ get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (AllSales.Length == 0)
yield return new ValidationResult("Please pick one sales item");
}
}
只是想知道这是否是处理这种情况的正确方法。
您还可以创建自定义验证属性,类似于以下内容:
public class EnsureOneItemAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var list = value as IList;
if (list != null)
{
return list.Count > 0;
}
return false;
}
}
然后像这样应用它:
[EnsureOneItemAttribute (ErrorMessage = "Please pick one sales item")]
public List<Sales> AllSales{ get; set; }
我知道我有点晚了,但是这个属性允许你设置最小和最大项目
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class EnsureMinimumElementsAttribute : ValidationAttribute
{
private readonly int _min;
private readonly int _max;
public EnsureMinimumElementsAttribute(int min = 0, int max = int.MaxValue)
{
_min = min;
_max = max;
}
public override bool IsValid(object value)
{
if (!(value is IList list))
return false;
return list.Count >= _min && list.Count <= _max;
}
}
用法 -
最低,没有最高
[EnsureMinimumElements(min: 1, ErrorMessage = "Select at least one item")]
最小值和最大值
[EnsureMinimumElements(min: 1, max: 6, ErrorMessage = "You can only add 1 to 6 items to your basket")]
没有分钟
[EnsureMinimumElements(max: 6, ErrorMessage = "You can add upto 6 items to your basket")]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.