Правило проверки MVC Dataannotation для коллекции?
Существует ли правило проверки dataannotation для свойства, основанного на коллекции?
У меня есть следующее
<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, чтобы установить минимальный размер коллекции.
2 ответа:
Я думаю, что что-то вроде этого может помочь:
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; } }
Есть место для улучшения, но это рабочий старт.
Другой вариант из .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
Валидатор в DataAnnotations автоматически вызовет этот метод проверки для любых IValidatableObjects.