2015-10-22 4 views
1

В ASP.NET MVC вы можете проверить модель, переданную в действие с помощью ModelState.IsValid().Проверка объекта в ASP.NET MVC без передачи его в действие

Я хотел бы проверить произвольные объекты, а не одну переданную модель. Как я могу это сделать, используя библиотеки фреймворка?

public ActionResult IsValidSoFar() 
{ 
    // Get a user's autosaved data 
    var json = await ... 
    HomeModel model = JsonConvert.Deserialize<HomeModel>(json); 

    // Validate the model <---- How?   
} 

public class HomeModel 
{ 
    [Required, MaxLength(100)] 
    public string Name { get; set; } 
} 
+0

Почему вы параметр 'строку model' вместо модели' HomeModel? «DefaultModelBinder» будет десериализовать его. –

ответ

4

вы можете использовать класс ValidationContext ... как ниже

var context = new ValidationContext(modelObject); 
    var results = new List<ValidationResult>(); 
    var isValid = Validator.TryValidateObject(modelObject, context, results); 

    if (!isValid) 
    { 
     foreach (var validationResult in results) 
     { 
      //validation errors 
     } 
    } 
+0

Hello @ Sam.C это именно то, что я ищу, большое спасибо – Nelssen

3

Вы можете использовать ValidateModel или TryValidateModel методы контроллера.

  • ValidateModel - бросает исключение, если модель не действует.
  • TryValidateModel - возвращает bool, который указывает, действительна ли модель.

ВАЖНО: Если вы активизируете список моделей один за другим, вы, вероятно, хотели бы сбросить ModelState для каждой итерации с помощью вызова ModelState.Clear();

Пожалуйста, смотрите мой вопрос относительно этого: Validate list of models programmatically in ASP.NET MVC