2011-06-15 3 views
53

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

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 другой информации и т.д. Между каждый шаг я храню каждый объект (т. е. объект продукта) в сеансе, поэтому пользователь может вернуться на этот этап процесса и изменить введенные данные.

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

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

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

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

ответ

68

Вы можете вызвать метод ValidateModel в Controller действия (documentation here).

+12

Спасибо, я использовал TryUpdateModel() в конце концов, так что не было исключений, сгенерированных. –

2

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

Me.TryValidateModel(MyCompany.OrderModel) 
35

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

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

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

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

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

Link to MSDN

+0

У меня есть обязательное поле, которое является нулевым и используется «ModelState.Clear()», а ModelState.IsValid - true. –

+1

Он работает, когда я помещаю «ModelState.Clear();» и "TryValidateModel (myModel);".Спасибо –

+0

Это может показаться очевидным после того, как вы подумаете об этом, но ваш пользовательский метод 'Validate' ** не будет вызываться **, если в атрибутах проверки есть какие-либо ошибки проверки. – Jess

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