我有以下视图模型
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循环的局部视图,该循环遍历每个车辆并调用另一个局部视图以显示它。
有没有更好的方法来做到这一点,或者类似于上面我唯一的选择?