簡體   English   中英

驗證列表<t>確保列表中包含帶有數據注釋 MVC C# 的列表一項</t>

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM