Asp.net MVC 3 запустить проверки на модели - PullRequest
2 голосов
/ 23 апреля 2011

Как я могу запустить все проверки DataAnnotation на модели?

Я создаю экземпляр модели из кода, и у меня нет привязки состояния модели или чего-то еще. Я просто хочу выполнить все мои проверки ... Я использую EF CodeFirst.

public class Category
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }
}

cat = new Category();
if (cat.IsValid()) { /* blah */ } // i want something like this

Я знаю, что это, вероятно, глупый вопрос, но я не могу найти ответ где-нибудь ..

Ответы [ 2 ]

5 голосов
/ 23 апреля 2011

Это похоже на этот вопрос о аннотациях данных модульного тестирования .Вы можете добавить метод расширения, подобный этому:

public static class ValidationExtension {

    public static bool IsValid<T>(this T model) where T: class {
        var validationResults = new List<ValidationResult>();
        var validationContext = new ValidationContext(model, null, null);
        Validator.TryValidateObject(model, validationContext, validationResults, true);
        return validationResults.Count == 0;
    }
}
0 голосов
/ 06 марта 2015

Название этого вопроса включает ASP.net MVC .

Обратите внимание, что класс валидатора и валидация MVC имеют незначительные различия.

Например:

  1. DataAnnotations.Validator не поддерживает готовый класс собеседника.
  2. MVC можно настроить для использования другой среды проверки, например FluentValidation.

Еслиесли вы хотите запустить проверку MVC и заполнить ModelState, вы можете вызвать TryValidateModel или ValidateModel .

, если вы не хотите заполнять ModelState, используйте этофрагмент кода в вашем контроллере.

 var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType());
 ModelValidator.GetModelValidator(metadata, ControllerContext).Validate(null);
...