Правило валидации DataCnotation MVC для коллекции? - PullRequest
4 голосов
/ 03 декабря 2010

Существует ли правило проверки аннотации данных для свойства на основе коллекции?

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

  <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 ]

6 голосов
/ 03 декабря 2010

Думаю, что-то вроде этого может помочь:

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 голосов
/ 08 февраля 2016

Другой вариант, начиная с .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 для любых объектов IValidatableObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...