2010-11-08 2 views
0

Мое предыдущее впечатление о RequiredFieldValidator и тому подобное заключалось в том, что они отображают метку ошибки и устанавливают значение Page.IsValid false, и это все. Это означает, что они оставят остальную часть задачи (предотвращая использование неправильных входных данных). Но сегодня я понял, что если вы используете DetailView для вставки новой записи в базу данных, и вы используете валидаторы для проверки текстовых полей внутри DetailsView, они автоматически предотвращают обновление базы данных.Как RequiredFieldValidator автоматически останавливает обновление базы данных?

Я хотел бы знать, как это реализовано за сценой. Я предполагаю, что это прервало жизненный цикл страницы в событии Validator.PreRender, чтобы соединения с базой данных на более позднем этапе не могли быть достигнуты? Возможно, я ошибаюсь.

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

ответ

1

В этой статье подробно объясняется валидация для ASP.NET.

http://msdn.microsoft.com/en-us/library/aa479045.aspx

Проверка может быть как на стороне сервера и/или на стороне клиента. Если используется, проверка на стороне клиента не позволяет пользователю отправить форму до тех пор, пока она не будет проверена. Проверка на стороне клиента выполняется с использованием JavaScript и DOM. Каждая кнопка отправки подключается к фреймворку для проверки проверки перед тем, как отправить сообщение обратно.

Проверка на стороне сервера работает по-разному. Цепочка событий расширена между загрузкой страницы и вызовом процедуры процедуры. Получены результаты проверки, которые могут быть интерпретированы любой процедурой события.

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

EDIT: Элемент управления DetailsView поддерживает элементы проверки на стороне сервера. Перейдите по этой ссылке для получения более подробной информации. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx#security

+0

Привет, я отключил JavaScript в своем браузере, и проверка на стороне сервера отвечала за автоматическое предотвращение обновления базы данных. – Aperture

+0

В этом случае у вас должно быть свойство DataView.EnableModelValidation равным True. Если вы установите значение False, проверка должна прекратить работу. – Faheem

+0

Привет, я отключил EnableModelValidation, и база данных по-прежнему не обновлялась, что означает, что EnableModelValidation не несет за это ответственности. – Aperture

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