2008-12-16 1 views

Antwort

9

angepasst ich eine Lösung bei http://blog.codeville.net/category/validation/page/2/

public class DataValidator 
    { 
    public class ErrorInfo 
    { 
     public ErrorInfo(string property, string message) 
     { 
      this.Property = property; 
      this.Message = message; 
     } 

     public string Message; 
     public string Property; 
    } 

    public static IEnumerable<ErrorInfo> Validate(object instance) 
    { 
     return from prop in instance.GetType().GetProperties() 
       from attribute in prop.GetCustomAttributes(typeof(ValidationAttribute), true).OfType<ValidationAttribute>() 
       where !attribute.IsValid(prop.GetValue(instance, null)) 
       select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty)); 
    } 
} 

gefunden Dies würde ermöglichen es Ihnen, den folgenden Code zu verwenden, jedes Objekt mit folgender Syntax zu validieren:

var errors = DataValidator.Validate(obj); 

if (errors.Any()) throw new ValidationException(); 
+0

das gefällt mir. Ich muss es versuchen, aber es sieht so aus als ob es den Job erledigt ... Der manuelle Aufruf von Validate() ist nicht so nett, aber wir könnten dies vermeiden, indem wir das in unseren UserControls implementieren –

+0

Kann Ihre Validate() nicht durch System.ComponentModel.DataAnnotations.Validator ersetzt werden? –

+0

@Rolf: Nur in Silverlight oder .Net 4+ – Darbio