验证列表<T> 确保列表中包含一个带有数据注释的项目 MVC C#

lac*_*der 4 c# asp.net-mvc asp.net-core-mvc

我正在尝试验证通用列表,例如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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

只是想知道这是否是处理这种情况的正确方法。

小智 7

您还可以创建自定义验证属性,类似于以下内容:

public class EnsureOneItemAttribute : ValidationAttribute
{
  public override bool IsValid(object value)
  {
    var list = value as IList;
    if (list != null)
    {
       return list.Count > 0;
    }
    return false;
  }     
}
Run Code Online (Sandbox Code Playgroud)

然后像这样应用它:

[EnsureOneItemAttribute (ErrorMessage = "Please pick one sales item")]
public List<Sales> AllSales{ get; set; }
Run Code Online (Sandbox Code Playgroud)