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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top