Convalida DataAnnotations con classe Validator
-
20-09-2019 - |
Domanda
Sto cercando di convalidare una classe decorato con annotazione di dati con il Validator class .
Funziona bene quando gli attributi vengono applicati alla stessa classe. Ma quando cerco di utilizzare una classe di metadati che non funziona. C'è qualcosa che dovrei fare con il Validator in modo che utilizza la classe di metadati? Ecco un po 'di codice ..
questo funziona:
public class Persona
{
[Required(AllowEmptyStrings = false, ErrorMessage = "El nombre es obligatorio")]
public string Nombre { get; set; }
[Range(0, int.MaxValue, ErrorMessage="La edad no puede ser negativa")]
public int Edad { get; set; }
}
questo non funziona:
[MetadataType(typeof(Persona_Validation))]
public class Persona
{
public string Nombre { get; set; }
public int Edad { get; set; }
}
public class Persona_Validation
{
[Required(AllowEmptyStrings = false, ErrorMessage = "El nombre es obligatorio")]
public string Nombre { get; set; }
[Range(0, int.MaxValue, ErrorMessage = "La edad no puede ser negativa")]
public int Edad { get; set; }
}
questo è come mi convalidare le istanze:
ValidationContext context = new ValidationContext(p, null, null);
List<ValidationResult> results = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(p, context, results, true);
Grazie.
Soluzione
ho trovato qui la risposta: http://forums.silverlight.net/ Forum / p / 149.264 / 377212.aspx
MVC riconosce l'attributo MetaDataType, ma altri progetti non lo fanno. Prima di convalidare, è necessario registrare manualmente la classe di metadati:
TypeDescriptor.AddProviderTransparent(
new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Persona), typeof(Persona_Validation)), typeof(Persona));
ValidationContext context = new ValidationContext(p, null, null);
List<ValidationResult> results = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(p, context, results, true);
Altri suggerimenti
Provare a spostare la classe di metadati nello stesso spazio dei nomi della classe Persona, se non è già. Ho avuto problemi simili e spostando la mia classe di metadati nello stesso spazio dei nomi di classe del modello L2S ha lavorato per me.