Asp.net mvc 对集合IEnumerable应用所需的属性验证

Asp.net mvc 对集合IEnumerable应用所需的属性验证,asp.net-mvc,data-annotations,modelstate,model-binding,Asp.net Mvc,Data Annotations,Modelstate,Model Binding,在不知道每个集合中有多少元素的情况下,如何将必需的属性(如验证)应用于以下内容: public class MyViewPageViewModel { [Required] public List<int> IntCollection { get; set; } [Required] public Dictionary<int, string> IntAndStringAllValueCollection { get; set; } [Requir

在不知道每个集合中有多少元素的情况下,如何将必需的属性(如验证)应用于以下内容:

public class MyViewPageViewModel
{
  [Required]
  public List<int> IntCollection { get; set; }

  [Required]
  public Dictionary<int, string> IntAndStringAllValueCollection { get; set; }

  [Required("Value")]
  public Dictionary<int, string> IntAndStringValueValidationCollection { get; set; }

  [Required("Name","HairColor")]
  public List<Person> PersonNameValidationCollection { get; set; }

}

对于IntCollection,我希望每个元素都是必需的。对于IntAndStringAllValueCollection,我希望每个键和每个值都是必需的。对于InAndStringValueValidationCollection,我不希望需要密钥,但希望需要值。

尽管我希望能够按照上面所述进行操作,但解决此问题的一种方法如下:

public class PageViewModel
{
    public List<RequiredStartAndEndDateTuple> OnlineDates { get; set; }
}

public class RequiredStartAndEndDateTuple
{
    public RequiredStartAndEndDateTuple() { }
    public RequiredStartAndEndDateTuple(DateTime? startDate, DateTime? endDate)
    {
        OnlineStartDate = startDate;
        OnlineEndDate = endDate;
    }

    [Required(ErrorMessage = "Start Date Required")]
    public DateTime? OnlineStartDate { get; set; }

    //-- Note, no attribute means end date not required
    public DateTime? OnlineEndDate { get; set; }
}
如果您对控制器和视图位感兴趣,请查看:

特别地,获取项目源代码,并使用强类型助手查看“顺序”页面