2013-08-21 10 views
7

Sviluppo app ASP.NET MVC4, codice EF prima. ho classe di base:Dati diversi Attributi di annotazione per le classi derivate

public class Entity 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
    } 

e ho alcuni classi derivate, ad esempio:

public class City : Entity 
{ 
    public int Population { get; set; } 
} 

E molte altre classi derivate (articolo, Topic, auto, ecc). Ora voglio implementare l'attributo "Richiesto" alla proprietà Title in tutte le classi e voglio che ci siano diversi ErrorMessages per diverse classi derivate. Ad esempio, "Titolo non deve essere vuoto" per la classe Argomento, "Nome della tua auto" per la classe Car ecc. Come posso fare questo? Grazie!

risposta

11

Si potrebbe fare la proprietà virtuale nella classe base:

public class Entity 
{ 
    public int Id { get; set; } 
    public virtual string Title { get; set; } 
} 

e poi sovrascrivere nella classe figlia, ne fanno richiesta e specificare il messaggio di errore che si desidera visualizzare:

public class City : Entity 
{ 
    public int Population { get; set; } 

    [Required(ErrorMessage = "Please name your city")] 
    public override string Title 
    { 
     get { return base.Title; } 
     set { base.Title = value; } 
    } 
} 

In alternativa è possibile utilizzare FluentValidation.NET anziché annotazioni di dati per definire la logica di convalida e in questo caso è possibile avere diversi validatori per i diversi tipi di calcestruzzo. Ad esempio:

public class CityValidator: AbstractValidator<City> 
{ 
    public CityValidator() 
    { 
     this 
      .RuleFor(x => x.Title) 
      .NotEmpty() 
      .WithMessage("Please name your city"); 
    } 
} 

public class CarValidator: AbstractValidator<Car> 
{ 
    public CityValidator() 
    { 
        this 
            .RuleFor(x => x.Title) 
            .NotEmpty() 
            .WithMessage("You should specify a name for your car"); 
    } 
} 

... 
+0

L'opzione di sovrascrittura è valida per la mia applicazione. Questo è ciò di cui ho bisogno. Grazie! – ifeelgood

+0

Quando si definisce una proprietà nella classe base, dovrebbe essere utilizzata da TUTTE le classi derivate. – Jowen

+0

Rendendo la proprietà virtuale nella classe base, il validatore di intervalli sta andando a colpire dichiarato nella classe figlio. – BrainCoder

Problemi correlati