[英]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.