2010-06-22 6 views
18

Мне было интересно, есть ли способ использовать аннотацию данных ASP.Net без сайта MVC.Использование аннотации данных ASP.Net MVC за пределами MVC

Мой пример: у меня есть класс, который когда-то был создан, должен быть проверен или выкинет ошибку. Мне нравится метод аннотаций данных, а не куча блоков if, запущенных initaliser.

Есть ли способ заставить это работать?

Я думал, что это будет что-то вроде:

  • аннотациями Добавление данных
  • Противопожарные метод в Инициализатором, который вызывает валидатор MVC на классе

какие-либо идеи? я должен признать, я нету добавил фреймворка для моего проекта, как я надеялся, что я мог бы просто использовать аннотации данных класса System.ComponentModel.DataValidation

+0

Я создал свою собственную версию класса DataValidation, я могу передать ее на аутсорсинг, если люди заинтересованы. Это было сделано до MVC2 и может вмещать более сложные случаи. –

ответ

26

Вот пример:

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

Но вполне честно FluentValidation много более могущественный.

+3

Я искал решение .Net 3.5 - ValidationContext недоступен до .Net 4.0 – Doug

+1

@Doug может захотеть поставить это как вопрос в вопросе. –

+0

К сожалению, эта проверка не рекурсирует через какие-либо сложные дочерние объекты или коллекции. Validator.TryValidateObject (...) просто выполняет немедленную проверку свойств и полей и называет это днем, в отличие от проверки, которая происходит при привязке модели в контроллере в мире MVC, которая пересекает весь граф объекта. – neumann1990

 Смежные вопросы

  • Нет связанных вопросов^_^