2012-08-30 13 views
6

ha riscontrato un problema con la convalida di classi complesse in ASP.NET MVC4 utilizzando DataAnnotation.Errore nella convalida di classi complesse in ASP.NET MVC4

Diamo un modello seguente (semplificato)

public class Customer 
{ 
    [Required] 
    [StringLength(8, MinimumLength = 3)]   
    public string UserName { get; set; } 

    [Required] 
    [StringLength(8, MinimumLength = 3)] 
    public string DisplayName { get; set; } 
} 


public class Order 
{ 
    public Customer customer { get; set; } 
} 

Poi tenta di convalidare un'istanza di questo modello in mio controller:

// CREATE A DUMMY INSTANCE OF THE MODEL 
Customer cust = new Customer(); 
cust.UserName = "x"; 
cust.DisplayName = "x"; 

Order orderModel = new Order(); 
orderModel.customer = cust; 

// VALIDATE MODEL 
TryValidateModel(orderModel); // ModelState.IsValid is TRUE (which is incorrect) 
TryValidateModel(cust); // ModelState.IsValid is FALSE (whic is correct} 

Validazione di orderModel dovesse fallire come il cust.UserName ha solo 1 carattere, ma 3 sono richiesti dal Modello. Lo stesso vale per cust.DisplayName. Ma quando convalido una pura classe Customer, fallisce come previsto.

Qualche idea di cosa c'è che non va?

grazie

Jiri

+1

per quanto ti conosco non è possibile validare oggetti nidificati come quello, magari usare un validatore personalizzato – saj

+1

Sembra che la validazione dell'annotazione dei dati non esegua la convalida degli oggetti nidificati per impostazione predefinita. Post simile qui http://stackoverflow.com/questions/2493800/how-can-i-tell-the-data-annotations-validator-to-also-validate-complex-child-pro –

risposta

2

DataAnnotations non scavare nei vostri oggetti su di esso la propria. Hai due scelte:

1 - Scrivere un validatore personalizzato per controllare proprietà secondarie

2 - Creare un modello di vista con popolato con le proprietà semplici, decorate con le annotazioni di dati