Вызов валидации ModelState вручную - PullRequest
57 голосов
/ 15 июня 2011

Сначала я использую код ASP.NET MVC 3 и добавил в свои модели аннотации данных проверки.Вот пример модели:

public class Product
{
    public int ProductId { get; set; }

    [Required(ErrorMessage = "Please enter a name")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required(ErrorMessage = "Please provide a logo")]
    public string Logo { get; set; }
}

На моем веб-сайте у меня есть многоэтапный процесс создания нового продукта - шаг 1, вы вводите информацию о продукте, шаг 2, другую информацию и т. Д. Между каждым шагом, который я хранюкаждый объект (т. е. объект Product) в сеансе, так что пользователь может вернуться к этой стадии процесса и изменить введенные данные.

На каждом экране у меня есть проверка на стороне клиента, работающая с новымjQuery validation fine.

Последний этап - экран подтверждения, после которого продукт создается в базе данных.Однако, поскольку пользователь может переходить между этапами, мне нужно проверить объекты (Product и некоторые другие), чтобы убедиться, что они правильно завершили данные.

Есть ли способ программно вызвать проверку ModelState для объектачто есть аннотации данных?Я не хочу проходить через каждое свойство объекта и выполнять ручную проверку.

Я открыт для предложений о том, как улучшить этот процесс, если это упрощает использование функций проверки модели:ASP.NET MVC 3.

Ответы [ 3 ]

73 голосов
/ 15 июня 2011

Вы можете вызвать метод ValidateModel в действии Controller (документация здесь ).

45 голосов
/ 15 ноября 2013

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

При проверке модели запускаются все средства проверки для всех свойств, если хотя бы один вход формы связан ссвойство модели.ValidateModel похож на метод TryValidateModel, за исключением того, что метод TryValidateModel не выдает исключение InvalidOperationException, если проверка модели не удалась.

ValidateModel - выдает исключение, если модель недопустима.

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

Если вы проверяете список моделей одна за другой, вы хотите сбросить настройкиModelState для каждой итерации путем вызова ModelState.Clear().

Ссылка на MSDN

2 голосов
/ 06 сентября 2013

Я обнаружил, что это работает и работает точно так же, как и ожидалось .. показывая ValidationSummary для только что полученного объекта в методе действия GET ... перед любым POST

Me.TryValidateModel(MyCompany.OrderModel)
...