Domanda

ASP.NET MVC 2 supporterà la convalida basata sugli attributi DataAnnotation come questo:

public class User
{
    [Required]
    [StringLength(200)]
    public string Name { get; set; }
}

Come posso verificare che uno stato del modello corrente sia valido usando solo .NET puro (non usando l'associazione MVC, i metodi del controller, ecc.)?

Idealmente, sarebbe un singolo metodo:

bool IsValid(object model);
È stato utile?

Soluzione

Questo esempio di codice è tratto da blog su xVal (che utilizza l'attributo DataAnnotations per validare le proprietà). Fondamentalmente, devi solo enumerare gli attibutes usando reflection e controllare IsValid () :.

internal static class DataAnnotationsValidationRunner
{
    public static IEnumerable<ErrorInfo> GetErrors(object instance)
    {
        return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
               from attribute in prop.Attributes.OfType<ValidationAttribute>()
               where !attribute.IsValid(prop.GetValue(instance))
               select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top