2012-11-13 9 views
15

I habe die folgende Klasse:Array muss enthält 1 Element

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

Ich mag ein Datum Annotation oben TaskDescriptions haben, so daß das Array mindestens ein Element enthalten? Ähnlich wie [Required]. Ist das möglich?

Antwort

14

ich eine benutzerdefinierte Validierung Attribut für diese, bevor sie verwendet gesehen haben, wie folgt aus:

(I Probe mit einer Liste gegeben haben, aber für Array angepasst werden könnte oder man könnte die Liste verwenden)

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

es kann unter Verwendung von Standard MinLengthAttribute Validierung Attribut getan werden, aber funktioniert nur für Arrays:

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

Offenbar ist es nur [in .net verfügbar 4.5+] (http://msdn.microsoft.com/en-us/ Bibliothek/system.componentmodel.da taannotations.minlengthattribute.minlengthattribute (v = vs.110) .aspx). :-( –

+5

Ein wenig mehr Infos über dieses Attribut: Sie sollten [Erforderlich] in Verbindung mit [MinLength (1)] verwenden, weil MinLength nicht ausgelöst wird, wenn das Array null ist (nicht leer, null) wird nicht unterstützt (korrigieren Sie mich, wenn ich falsch liege) mit Standard-Client-Seite Validatoren.Es löst nur die ModelState.IsValid. – Pluc

+0

Dieses Attribut funktioniert auch für Objekte, die die ICollection-Schnittstelle und Zeichenfolgen implementiert .. –