2009-10-17 7 views
9

Я пытаюсь проследить, почему моя проверка ASP.NET MVC 2 не работает, но я не могу найти достаточно о том, как это работает, чтобы это сделать.Как работает валидация в ASP.NET MVC 2?

Я следил за шагами в этом useful article by David Hayden, который, кажется, является лучшей документации в настоящее время, но ничего на самом деле не происходит.

Я получаю подтверждение при отправке на сервер (как это было после Preview 1, когда я добавил аннотации данных к моей модели), но я не получаю подтверждения на стороне клиента.

Как я могу отслеживать, чтобы проверить? До сих пор я проверил следующие очевидные вещи

  • MicrosoftMvcJQueryValidation.js и jquery.validate.min.js файлы загружаются
  • Html.ClientValidationEnabled = истинный

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

ответ

3

Для того чтобы поле было подтверждено на стороне клиента, вы должны указать вызов Html.ValidationMessage/Html.ValidationMessageFor <> для поля (так же, как Дэвид сделал в учебнике, которое вы связали) в представлении. Это по сути является триггером логики проверки на стороне клиента, который вы хотите запустить проверку для этого поля.

Если есть ситуации, когда вы фактически не хотите, чтобы сообщение проверки было визуально отображаться для каждого поля (то есть с использованием Html.ValidationMessage), но скорее разрешало бы сводку быть единственным источником сообщений об ошибках проверки (т.е. используя Html.ValidationSummary), вам по-прежнему необходимо каким-то образом «запустить» проверку для определенных полей, в которых вы хотите. Этого можно добиться с помощью методов Html.Validate/Html.ValidateFor <> в вашем представлении. Эти помощники ничего не проявят, но просто зарегистрируют указанное поле для проверки на стороне клиента.

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

10

Вот что я узнал:

ВАЖНЕЙШАЯ

  • Ваш HTML форма должна быть создана с помощью директивы, а не только BeginForm и EndForm.
  • перед началом «Форма»
  • Вы должны использовать Html.ValidationMessage для каждого поля
  • Вы должны установить Html.ClientValidationEnabled = истинна на каждом частичном контроле Вы должны установить Html.ClientValidationEnabled = истина (ASCX)

КАК ЭТО РАБОТАЕТ (очень простой обзор)

  • Когда вы Html.BeginForm он создает «FormContext» в ViewContext
  • Когда ValidationMessage хелперов используются метаданные помещаются в виде контекста
  • Когда форма расположена (в использовании заявления) он записывает весь код проверки

MISC

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

  • Вам НЕ нужно использовать Html.TextBoxFor или Html.ValidationMessageFor, вы можете использовать Html.TextBox и Html.ValidationMessage

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