Работа с формами в ASP.NET

Для некоторых страниц требуется несколько логических форм. Логическая форма — не обязательно HTML-форма. Это скорее группа логически связанных элементов управления для ввода, содержимое которых одновременно передается коду, способному обработать их данные. Такая группа элементов управления ведет себя подобно форме. Применение тэга <form> для объединения этих элементов - элементарный способ создания логической формы. К сожалению, ASP.NET не позволяет использовать более одного серверного тэга <form>. Но логические формы можно реализовать и другими способами.

Для примера возьмем страницу авторизации (login page), предназначенную для доступа к закрытым областям WEB-сайта. Зарегистрированные пользователи вводят свои учетные данные и соединяются. Незарегистрированные пользователи должны заполнить форму перед тем, как получат параметры, необходимые для соединения. Перечислим несколько способов реализации этой логики.

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

Отправка HTML-формы

Для ASP.NET такое решение неприемлимо, за исключением того случая, когда вы используете простые HTML-тэги (без атрибута runat) и ASP-стиль программирования. Более подходящее для ASP.NET решение:

Отправка форм в ASP.NET

Единственный тэг <form> содержит несколько логических форм. Все логические формы отправляют данные одной и той же странице и скрывают ненужные элементы пользовательского интерфейса (UI). Внутри открывающего и закрывающего тэгов единственной формы может находится две или более групп логически связанных элементов управления. Каждая группа может возвращать данные на сервер либо с помощью кнопки Submit, либо с помощью гиперссылки, связанной с кодом сценария (script), — в ASP.NET это называется кнопкой-ссылкой (link button). Хотя в техническом смысле такие группы не являются формами, они ведут себя так же, как HTML-формы. Все группы отправляют данные одной и той же странице, но инфраструктура ASP.NET гарантирует сохранение состояния и выполнение кода, указанного для группы, которая инициировала отправку. Каждая кнопка-ссылка связана с серверным методом, выполняемым при возврате страницы на сервер после щелчка этой кнопки.

С функциональной точки зрения, этот механизм ничем не отличается от ASP-реализации. Но с точки зрения программирования, он удобнее за счет более высокого уровня абстракции и поддержки таких полезных возможностей, как использование состояния отображения (view state) и программирование серверных элементов управления.

Как обновлять UI в генерируемом HTML
В ASP.NET серверные элементы управления можно программно скрывать и отображать. Элементы управления, свойство Visible которых равно false, игнорируются синтаксическим анализатором (parser) ASP.NET, и для них не формируется HTML-код. В соответствии с рисунком 2, представленном выше вы можете спроектировать страницу авторизации, содержащую три блока HTML-кода. Первый блок — авторизационная форма, второй — регистрационная, третий — закрытые данные. При первом отображении страницы (когда IsPostBack равно false) работают блоки авторизации и регистрации, а закрытая область остается невидимой. Затем пользователь выбирает либо авторизацию, либо регистрацию. Страница возвращает введенные данные на сервер и выполняет код. После регистрации нового пользователя или проверки учетных данных существующего вы просто выключаете видимость первых двух форм и делаете видимой третью.

Смотрите пример кода>>