Заключительной из рассматриваемых здесь задач контроля ввода будет использование элемента ValidationSummary. В настоящий момент каждый из ваших элементов контроля отображает сообщение об ошибке в том месте, где это было определено на этапе разработки. Во многих случаях это будет как раз то, что вам требуется. Однако в сложных формах с многочисленными элементами ввода вы не захотите видеть неожиданно всплывающие то тут, то там яркие сообщения. Используя тип ValidationSummary, вы можете заставить все типы контроля ввода отображать сообщения об ошибках в строго отведенном для этого месте на странице.
Первым шагом при этом является добавление ValidationSummary в файл *.aspx. Дополнительно можно установить свойство HeaderText этого типа, а также значение DisplayMode, которое по умолчанию задает представление сообщений об ошибках в виде списка с буллитами.
‹asp:ValidationSummary id="ValidationSummary1" style="Z-INDEX: 123; LEFT: 152px; POSITION: absolute; TOP: 320px" runat="server" Width="353px" HeaderText="Элементы ввода, требующие корректировки."›
‹/asp:ValidationSummary›
Затем для каждого элемента контроля ввода на странице (для RequiredFieldValidator, RangeValidator и т.д.) нужно установить свойство Display равным значению None. Это гарантирует, что вы не увидите дубликатов сообщений об ошибках для одного и того же случая неудачного завершения проверки (когда одно сообщение отображается в резюмирующем списке, а другое – в месте размещения элемента контроля ввода).
Наконец, если требуется отобразить сообщения об ошибке с помощью MessageBox клиента, то установите для свойства ShowMessageBox значение true (истина), а для свойства ShowSummary – значение false (ложь).
Исходный код. Проект ValidatorCtrls размещен в подкаталоге, соответствующем главе 23.
Резюме
Создание Web-приложений требует иного подхода по сравнению с тем, который иcпользуется для создания "традиционных" приложений. В начале этой главы был предложен краткий обзор фундаментальных составляющих Web-разработки, к которым можно отнести HTML, HTTP, сценарии клиента и сценарии сервера при использовании классической технологии ASP.
Значительная часть главы была посвящена рассмотрению архитектуры страницы ASP.NET. Вы увидели, что с каждым файлом *.aspx в проекте связан некоторый класс, производный от System.Web.UI.Page. С помощью такого подхода ASP.NET позволяет строить более пригодные для многократного использования системы, соответствующие принципам ООП. В этой главе рассматривалась также использование шаблонов страниц и различных Web-элементов управления (включая новые типы GridView и Wizard). Вы могли убедиться в том, что эти элементы графического интерфейса отвечают за создание подходящих дескрипторов HTML-кода, направляемого клиенту. Элементы контроля ввода являются серверными элементами, на которые возлагается задача подготовки JavaScript-кода клиента для выполнения проверки допустимости введенных в форму данных, чтобы уменьшить количество необходимых обращений к серверу.
ГЛАВА 24. Web-приложения ASP.NET 2.0
Предыдущая глава была посвящена композиции страниц ASP.NET и поведению содержащихся в них Web-элементов управления. На основе полученных знаний в этой главе мы рассмотрим роль типа HttpApplication. Вы увидите, что функциональные возможности HttpApplication позволяют выполнять перехват ряда событий, что дает возможность рассматривать Web-приложения, скорее, как связную единицу, а не как набор автономных файлов *.aspx.
В дополнение к исследованию типа HttpApplication в этой главе также обсуждается важная тема управления состоянием объектов. Здесь вы узнаете о роли данных состояния представлений и элементов управления, о переменных уровня сеанса и приложения, а также о связанной с состояниями конструкции ASP.NET, которая называется
Проблема состояния
В начале предыдущей главы было указано, что HTTP является сетевым протоколом, не обеспечивающим сохранение состояний. Именно этот факт делает процесс разработки Web-приложений столь отличающимся от процесса построения выполняемого компоновочного блока. Например, при создании приложения Windows Forms вы можете быть уверены в том, что любые члены-переменные, определенные в классе формы, будут существовать в памяти до тех пор, пока пользователь не прекратит работу выполняемого файла.
public partial class MainWindow: Form {
// Данные состояния.
private string userFavoriteCar;
…
}