对象MVC列表的自定义验证

时间:2017-08-14 10:36:25

标签: asp.net-mvc validation

我正在尝试根据列表中的其他字段验证字段

public class CustomerModel
    {    
           public List<CustomerBrand> Brands { get; set; }

    }  
    }
    public class CustomerBrand
    {             
        public int Priority { get; set; }
        public bool Checked { get; set; }
     }

如下所示,如果勾选了复选框,则在文本框中输入的值必须大于零。任何人都可以帮助解决方案,使模型和控制器之外的验证保持不变

enter image description here

我使用此方法使其工作,但希望能够指出违规行。

  public class CustomerModel : IValidatableObject
    {
        public string Name { get; set; }

        public List<CustomerBrand> Brands { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
           foreach(var brand in Brands)
            {
                if(brand.Checked)
                {
                    if(brand.Priority < 1)
                    {
                        yield return new ValidationResult("Priority must be greater than 1");
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

int x = 1;
foreach(var brand in Brands)
{
    if(brand.Checked)
    {
        if(brand.Priority < 1)
        {
            yield return new ValidationResult("Item " + x.ToString() + " - Priority must be greater than 1");
        }
    }
    x++;
}

如果您有办法通过列表中的位置以外的其他内容来引用项目,则可以使用该项目代替 x