2015-10-12 2 views
1

У меня есть модель для контроллера WebAPI2 с полем, которое принимает коллекцию (Список) строк. Есть ли способ, которым я могу указать DataAnnotations (например, [MaxLength]) для строк, чтобы убедиться, через проверку, что ни одна из строк в списке не длинна> 50?Могу ли я использовать DataAnnotations для проверки свойства коллекции?

public class MyModel 
    { 
     //... 

     [Required] 
     public List<string> Identifiers { get; set; } 

     // .... 
    } 

Я бы предпочел не создавать новый класс просто для обертывания строки.

ответ

1

Вы можете написать свой собственный атрибут проверки, например. следующим образом:

public class NoStringInListBiggerThanAttribute : ValidationAttribute 
{ 
    private readonly int length; 

    public NoStringInListBiggerThanAttribute(int length) 
    { 
     this.length = length; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     var strings = value as IEnumerable<string>; 
     if(strings == null) 
      return ValidationResult.Success; 

     var invalid = strings.Where(s => s.Length > length).ToArray(); 
     if(invalid.Length > 0) 
      return new ValidationResult("The following strings exceed the value: " + string.Join(", ", invalid)); 

     return ValidationResult.Success; 
    } 
} 

Вы сможете разместить его непосредственно над вашей собственности:

[Required, NoStringInListBiggerThan(50)] 
public List<string> Identifiers {get; set;} 
+0

Я, вероятно, хотите, чтобы сделать [ValidateCollection (новый MaxLengthAttribute (50))], чтобы для любого из других атрибутов, которые будут применяться, а также вне зависимости от каждого из них. Надеюсь, что в этом есть что-то, но это будет резервный план. –