有条件地根据父模型值验证集合/列表项属性

时间:2016-10-18 05:50:10

标签: asp.net asp.net-mvc validation collections asp.net-mvc-validation

我有以下视图模型

public class Step4ViewModel {
  [Required(ErrorMessage="Yes/No Required")]
  public bool? HaveVehicles { get; set; }
  public List<Vehicle> Vehicles { get; set; }
  public Step4ViewModel() {
    this.Vehicles = new List<Vehicle>();
  }
}

public class Vehicle {
    public string Index { get; set; }

    [DisplayName("Registration/Vin")]
    [Required(ErrorMessage="Registration Required")]
    [ValidVehicleRegistrationNumber(ErrorMessage = "Invalid Id Number")]
    public string Registration { get; set; }

    [Required(ErrorMessage="Make Required")]
    public string Make { get; set; }

    [Required(ErrorMessage="Model Required")]
    public string Model { get; set; }

    [Required(ErrorMessage="Year")]
    public string Year { get; set; }

    public Vehicle()
    {
        this.Index = Guid.NewGuid().ToString();
    }
}

验证工作正常。问题是它始终有效。当用户表明他们有车辆时,我只希望验证能够在集合中的车辆上发射。如果HaveVehicles等于false,我不希望激活验证。

通常对于这种验证,我会构建一个自定义验证器,如果HaveVehicles为true,我只返回验证错误。我无法在此处执行此操作,因为HaveVehicles位于父模型中,该模型无法从车辆对象内部进行。

我可以使用的一种方法是使用局部视图来添加/删除DOM中的集合,因为没有验证空集合。如果用户选择是,则ajax加载包含for循环的局部视图,该循环遍历每个车辆并调用另一个局部视图以显示它。

有没有更好的方法来做到这一点,或者类似于上面我唯一的选择?

0 个答案:

没有答案