2010-12-02 4 views
4

Есть ли правило проверки правильности данных для свойства, основанного на коллекции?MVC Правило валидации данных для коллекции?

У меня есть следующий

<DisplayName("Category")> 
    <Range(1, Integer.MaxValue, ErrorMessage:="Please select a category")> 
    Property CategoryId As Integer 

    <DisplayName("Technical Services")> 
    Property TechnicalServices As List(Of Integer) 

Я ищу валидатор, что я могу добавить к свойству TechnicalServices установить минимальное значение для размера коллекции.

ответ

6

Я думаю, что что-то подобное может помочь:

public class MinimumCollectionSizeAttribute : ValidationAttribute 
{ 
    private int _minSize; 
    public MinimumCollectionSizeAttribute(int minSize) 
    { 
     _minSize = minSize; 
    } 

    public override bool IsValid(object value) 
    { 
     if (value == null) return true; 
     var list = value as ICollection; 

     if (list == null) return true; 

     return list.Count >= _minSize; 
    }  
} 

Там место для улучшения, но это рабочий старт.

+0

Хороший ответ CGK! – Francisco 2011-04-11 21:13:03

0

Другой вариант из .NET 4 и далее будет делать сам класс (который содержит свойство коллекции в вопросе) реализации IValidatableObject, такие как:

Public Class SomeClass 
    Implements IValidatableObject 

    Public Property TechnicalServices() As List(Of Integer) 
     Get 
      Return m_TechnicalServices 
     End Get 
     Set 
      m_TechnicalServices = Value 
     End Set 
    End Property 
    Private m_TechnicalServices As List(Of Integer) 

    Public Function Validate(validationContext As ValidationContext) As IEnumerable(Of ValidationResult) 
     Dim results = New List(Of ValidationResult)() 

     If TechnicalServices.Count < 1 Then 
      results.Add(New ValidationResult("There must be at least one TechnicalService")) 
     End If 

     Return results 
    End Function 
End Class 

Validator в DataAnnotations будет автоматически вызывать этот метод Validate для любых IValidatableObjects.

Смежные вопросы