2012-11-13 22 views
15

Mam następujące klasy:Tablica musi zawierać 1 elementu

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

Chciałbym mieć adnotację danych powyżej TaskDescriptions tak, że tablica musi zawierać co najmniej jeden element? Podobnie jak [Required]. czy to możliwe?

Odpowiedz

14

Widziałem atrybut niestandardowy walidacji wykorzystywany do tego wcześniej, na przykład:

(Dałem próbki z listy, ale może być dostosowany do tablicy lub można użyć lista)

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

można to zrobić za pomocą standardowego atrybutu walidacji MinLengthAttribute, ale działa tylko dla tablic:

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

Widocznie to tylko [dostępne w .NET 4.5+] (http://msdn.microsoft.com/en-us/ biblioteka/system.componentmodel.da taannotations.minlengthattribute.minlengthattribute (v = vs.110) .aspx). :-( –

+5

Trochę więcej informacji na temat tego atrybutu: Powinieneś użyć [Wymagane] w połączeniu z [MinLength (1)], ponieważ MinLength nie wyzwoli, jeśli tablica ma wartość NULL (nie jest pusta, null). nie jest obsługiwany (popraw mnie, jeśli się mylę) z domyślnymi walidatorami po stronie klienta Wywołuje tylko parametr ModelState.IsValid. – Pluc

+0

Ten atrybut działa również w przypadku obiektów implementujących interfejs ICollection i ciągi znaków. –