2012-11-13 7 views
15

je la classe suivante:tableau doit contenir 1 élément

public class CreateJob 
{ 
    [Required] 
    public int JobTypeId { get; set; } 
    public string RequestedBy { get; set; } 
    public JobTask[] TaskDescriptions { get; set; } 
} 

Je voudrais avoir une annotation de données ci-dessus TaskDescriptions afin que le tableau doit contenir au moins un élément? Un peu comme [Required]. Est-ce possible?

Répondre

14

Je l'ai vu un attribut de validation personnalisé utilisé pour cela avant, comme ceci:

(j'ai donné l'échantillon avec une liste, mais pourrait être adapté pour un tableau ou vous pouvez utiliser la liste)

public class MustHaveOneElementAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     var list = value as IList; 
     if (list != null) 
     { 
      return list.Count > 0; 
     } 
     return false; 
    } 
} 
[MustHaveOneElementAttribute (ErrorMessage = "At least a task is required")] 
public List<Person> TaskDescriptions { get; private set; } 
25

il peut être fait en utilisant l'attribut de validation standard MinLengthAttribute, mais ne fonctionne que pour les tableaux:

public class CreateJob 
{ 
    [Required] 
    public int JobTypeId { get; set; } 
    public string RequestedBy { get; set; } 
    [MinLength(1)] 
    public JobTask[] TaskDescriptions { get; set; } 
} 
+0

Apparemment, il est seulement [disponible en .net 4.5+] (http://msdn.microsoft.com/en-us/ library/system.componentmodel.da taannotations.minlengthattribute.minlengttribute (v = vs.110) .aspx) également. :-( –

+5

Un peu plus d'informations sur cet attribut: Vous devez utiliser [Obligatoire] en conjonction avec [MinLength (1)] car MinLength ne se déclenchera pas si le tableau est null (pas vide, null). n'est pas supporté (corrigez-moi si je me trompe) avec les validateurs côté client par défaut, il ne déclenchera que le ModelState.IsValid – Pluc

+0

Cet attribut fonctionne également pour les objets qui implémente l'interface ICollection et les chaînes –

Questions connexes