2010-06-22 8 views
18

Ich fragte mich, ob es eine Möglichkeit gibt, ASP.Net Data Annotation ohne die MVC-Site zu verwenden.Verwenden von ASP.Net MVC Data Annotation außerhalb von MVC

Mein Beispiel ist, dass ich eine Klasse, die einmal erstellt muss überprüft werden müssen, oder wird einen Fehler werfen. Ich mag die Methode der Datenanmerkungen, statt einer Menge von if-Blöcken, die vom Initalisator abgefeuert werden.

Gibt es eine Möglichkeit, dies zum Laufen zu bringen?

Ich dachte, es so etwas wie wäre:

  • Daten hinzufügen Anmerkungen
  • Feuer ein Verfahren, in dem initialiser, die den MVC-Validator auf der Klasse

irgendwelche Ideen nennen? Ich muß zugeben, ich habe den MVC-Framework zu meinem Projekt hinzugefügt, wie ich habe gehofft, dass ich nur die Daten Anmerkungen Klasse System.ComponentModel.DataValidation

+0

Ich habe meine eigene Version der DataValidation-Klasse erstellt, die ich möglicherweise auslagern kann, wenn die Leute interessiert sind. Es wurde vor MVC2 gemacht und kann komplexere Fälle berücksichtigen. –

Antwort

26

Hier ist ein Beispiel verwenden:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

public class Foo 
{ 
    [Required(ErrorMessage = "the Bar is absolutely required :-)")] 
    public string Bar { get; set; } 
} 

class Program 
{ 
    public static void Main() 
    { 
     var foo = new Foo(); 
     var results = new List<ValidationResult>(); 
     var context = new ValidationContext(foo, null, null); 
     if (!Validator.TryValidateObject(foo, context, results)) 
     { 
      foreach (var error in results) 
      { 
       Console.WriteLine(error.ErrorMessage); 
      } 
     } 
    } 
} 

Aber ganz ehrlich FluentValidation ist viel stärker.

+3

Ich war auf der Suche nach einer .Net-3.5-Lösung - ValidationContext ist nicht verfügbar. NET 4.0 – Doug

+1

@Doug könnte das als ein Req in der Frage setzen möchten. –

+0

Leider wird diese Überprüfung nicht durch komplexe untergeordnete Objekte oder Sammlungen rückgängig gemacht. Das Validator.TryValidateObject (...) führt nur sofortige Eigenschaften- und Feldvalidierungen durch und ruft es als Tag auf, im Gegensatz zu der Validierung, die bei der Modellbindung im Controller in MVC erfolgt, die das gesamte Objektdiagramm durchläuft. – neumann1990

Verwandte Themen