2010-12-02 19 views
4

コレクションベースのプロパティのデータアノテーション検証ルールはありますか?MVCコレクションのデータ注釈検証ルール?

私はコレクションのサイズの最小値を設定するにはTechnicalServicesプロパティに追加できるバリデータを探しています、次の

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

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

を持っています。

答えて

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; 
    }  
} 

あり改善の余地がありますが、それは作業開始です。 DataAnnotationsでValidatorは、自動的にこのValidateメソッドを呼び出します

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 

+0

正解CGK! – Francisco

0

.NET 4から別のオプションは、以降のような、IValidatableObjectを実装して(問題のコレクションプロパティを含む)クラス自体を作ることであろう任意のIValidatableObjects。

関連する問題