2010-06-22 13 views
18

Je me demandais s'il était possible d'utiliser l'annotation de données ASP.Net sans le site MVC. Mon exemple est que j'ai une classe qui, une fois créée doit être validée, ou va lancer une erreur. J'aime la méthode des annotations de données, au lieu d'un tas de blocs if lancés par l'initaliser.Utilisation de l'annotation de données ASP.Net MVC en dehors de MVC

Existe-t-il un moyen de faire fonctionner cela?

je pensais que ce serait quelque chose comme:

  • annotations de données Ajouter
  • incendie une méthode dans le initialiseur qui appelle le validateur MVC sur la classe

des idées? Je dois admettre que je nai ajouté le framework MVC pour mon projet que j'espérais que je pouvais utiliser les annotations de données de classe System.ComponentModel.DataValidation

+0

J'ai créé ma propre version de la classe DataValidation, je peux éventuellement l'externaliser si les gens sont intéressés. Il a été fait avant MVC2, et peut accueillir des cas plus complexes. –

Répondre

26

Voici un exemple:

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); 
      } 
     } 
    } 
} 

Mais très honnêtement FluentValidation est beaucoup plus puissant.

+3

Je cherchais une solution .Net 3.5 - ValidationContext n'est pas disponible avant. Net 4.0 – Doug

+1

@Doug pourrait vouloir mettre cela comme un req dans la question. –

+0

Malheureusement, cette validation ne se répète pas dans les objets enfants ou les collections complexes. Validator.TryValidateObject (...) ne fait que des validations immédiates de propriété et de champ, et l'appelle un jour, contrairement à la validation qui se produit sur la liaison de modèle dans le contrôleur dans le monde MVC qui traverse le graphe d'objets entier. – neumann1990