2013-03-19 15 views
11

ho implementato IValidatableObject diverse volte e non hanno mai scoperto quale sia lo scopo di analizzare ValidationContext al metodo Convalida è - la mia tipica IValidatableObject implementazione simile a questa:Qual è lo scopo della ValidationContext in sede di attuazione IValidatableObject

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (Prop1 == Prop2) 
    { 
     yield return new ValidationResult(
       "Prop1 and Prop2 must be different.", 
       new[] {"Prop1", "Prop2"}); 
    } 
} 

C'è qualcosa che ho perso che avrei potuto usare validationContext per?

MODIFICA: sto usando ASP.NET MVC e questo è implementato nella classe - non nel controller.

risposta

6

ValidationContext contiene IServiceProvider proprietà. È il punto di estensione per passare il contenitore DI agli attributi di convalida e ai metodi di convalida. È possibile utilizzarlo, ad esempio, per eseguire la convalida del database senza impostare la dipendenza da dbcontext nel modello.

+6

È utile fornire un esempio su come passare un contenitore DI in questa particolare situazione. – Stack0verflow

+0

in asp.net mvc questo può essere fatto con la creazione del proprio provider di validazione. –

+3

Puoi per favore dare un esempio di questo ?? Sono davvero bloccato cercando di fare validazioni correttamente e vedere una risposta potenziale senza codice è davvero triste :( –

6

È necessario recuperare Prop1 e Prop2 da validationContext. Dalla tua domanda è difficile dire se stai usando WebForms (quindi hai code-binding con le proprietà) o MVC (e se stai implementando questo nel controller).

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (validationContext["Prop1"] == validationContext["Prop2"]) 
    { 
     yield return new ValidationResult(
       "Prop1 and Prop2 must be different.", 
       new[] {"Prop1", "Prop2"}); 
    } 
} 
Problemi correlati