|
|
|||||||||||||||||||||||||||||
|
ASP.Net. Лекция 4. Серверные элементы управления. Продолжение (исходники, документация)Источник: ASPNET Mania Асмик Гаряка
В начале маленькая «хитрость». Хороший веб-разработчик должен знать, как выглядят его страницы в разных браузерах. По умолчанию обычно они открываются в Internet Explorer. Щелкните правой кнопкой мыши на файле в Visual Studio Solution Explorer и выберите Browse with. Там можно сменить браузер по умолчанию или выбрать другой браузер для данного просмотра. ButtonButton - это командная кнопка, нажатие на которую часто приводит к отправке данных на сервер. Можно создавать кнопки двух типов: для передачи данных формы(submit button) или командные кнопки для выполнения различных функций, связанных с данной кнопкой. Если на форме есть несколько кнопок, свойство CommandName позволяет узнать, какая именно кнопка была нажата. ASP .NET поддерживает 3 вида событий.
Например, чтобы обработать щелчок на кнопке, мы переопределяем событие Click.
События можно определить через вкладку событий в окне свойств. Второй аргумент всех обработчиков событий имеет тип EventArgs или какой-либо, унаследованный от него. Например, мы хотим создать форму для заполнения резюме. Автор может иметь заранее неизвестное нам количество предыдущих мест работы. Добавим на форму кнопку, при нажатии на которую в форму добавляется один элемент ввода текста.
Здесь мы имеем массив из 10 элементов типа TextBox. Новый элемент создается в момент нажатия на кнопку «Еще». Можно добавить до 10 новых элементов. Как и раньше, они размещаются в контейнере, это нужно, чтобы они выводились до кнопки. При помощи свойства OnClientClick можно задать клиентский сценарий на JavaScript. Его значением может быть встроенная функция, или описанная в теле страницы. Клиентский код выполняется до серверного кода, заданного в свойстве OnClick. ImageЭлемент управления asp:image соответствует тегу img языка HTML. Его можно использовать для динамического добавления на страницу новых изображений. Вернемся к нашему туристическому агентству. Мы решили, что кода клиент выбирает города, на страницу автоматически должна выводиться карта соответствующего города. Оставляем это в качестве упражнения. Карты городов можно найти через Яндекс. <asp:Image> имеет свойстваAlternateText, ImageUrl, ImageAlign
Как всегда, свойства можно менять из программы. Например, меняя значение ImageUrl, можно организовать просмотр множества картинок в виде слайд-шоу. Создайте директорию images и поместите в него несколько картинок image1, image2 и так далее. Напишем новую страницу.
ImageButtonЭлемент управления ImageButton представляет собой комбинацию элементов Image и Button. Его можно использовать для создания изображений, чувствительных к клику мышки. Щелчок является событием, при наступлении которого выполняется некоторый кoд.
ImageButton позволяет достигнуть эффекта, аналогичного карте изображения. Событие Click позволяет узнать координаты щелчка мыши и реагировать соответственно региону, в котором была нажата мышь. Обработчик события должен принимать аргумент типа ImageClickEventArgs - наследникаSystem.EventArgs. У него есть дополнительные поля X и Y - координаты клика мышки.
Вернемся опять к турагентству. Директор вызвал вас(программиста) и попросил сделать следующее: на странице с изображением карты Каира необходимо сделать так, чтобы когда пользователь нажимал мышкой в любое место, открывалась карта района, на который он нажал. Всего имеется 9 районов. Все картинки имеют размер 300 на 300 пикселов. Районы одинаковые, расположены в таблице 3 на 3. Вы пишете:
А более простое использование -создание красивых нестандартных кнопок. Свойство CommandName используется так же, как и в случает с обычной кнопкой.
Картинки этого примера есть в поставке Visual Studio 2005 Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\Web\CSharp\1033. Скопируйте их в папку Images вашего проекта и добавьте их в проект. Эту функцию вставьте в файл отделенного кода.
У первой кнопки установлено свойство ToolTip. Посмотрите страницу в Internet Explorer. Окно с подсказкой появится при наведении на эту кнопку. А вот Opera выводит подсказку для всех кнопок. Только для тех, в которых установлен ToolTip, он выводится на первой строчке. Во второй - адрес. У кнопки также показано использование свойства OnClientClick. Оно задает клиентский сценарий, который будет исполняться при нажатии на кнопку без обращения к серверу. Здесь это функция alert языка Javascript - вызов окна с уведомлением. HyperLink и LinkButtonHyperLink - гиперссылка обычная или с картинкой. Они позволяют передвигаться по сайту или давать ссылку на другие сайты.
Знак ~ обозначает корневой каталог текущего сайта. LinkButton - это кнопка, которая выглядит как гиперссылка. Нажатие на нее приводит к перезагрузке страницы. В свойстве PostBackUrl можно задать адрес страницы, на которую будет перенаправлен запрос. BulletedListЭтот элемент управления позволяет воспроизвести нумерованные и ненумерованные маркированные списки и добавляет к этому много новых возможностей. Это новый элемент ASP.NET 2.0 и тоже может быть привязан к данным. Тип списка определяется свойством BulletStyle. Список может быть пронумерован цифрами, буквами или латинскими числами, или же помечен маркерами разных форм.
Выглядит на странице как
А его HTML-код
Если свойство BulletStyle поменять на "Circle", то будет сгененирован ненумерованный список
При значении CustomImage необходимо задать картинку в свойстве BulletImageUrl. Элементами списка могут быть гиперссылки и кнопки-гиперссылки.
Сами гиперссылки следует записывать в атрибут ListItem Value. Тип LinkButton превращает пункты списка в гиперссылки, которые вызывают перезагрузку страницы. Обработчик нажатия на кнопки принимает аргумент, в котором содержится информация об индексе нажатого пункта.
LiteralЕсли не требуется менять значение текста программно, можно использовать элемент управления Literal. В таком случае текст будет выводится «как есть», без тегов <span>. Этот класс наследуется не от WebControl, а от Control, поэтому его можно ставить вне формы. Соответственно у него нет свойств, отвечающих за внешний вид и стиль. Это не страшно, стиль может быть определен в контейнере, в который он включен - div или Panel. Зато есть интересное свойство Mode. Попробуем на примере:
Mode="Encode" кодирует текст так, чтобы в браузере был виден именно этот HTML-код, заменяя специальные символы разметки CER-последовательностями.
Это полезно, если бывает нужно вывести код, и не только HTML. На некоторых сайтах, где есть учебники по С++в plain text, в примерах кода встречается строка #include без имени включаемого файла. Оно было «съедено» браузером, который считает все в <> за тег, даже если не распознает его, хотя текст был заключен в <PRE></PRE>. Ну вот, этой проблемы можно избежать. TableТаблицы в HTML очень распространены, так как они позволяют позиционировать элементы на странице. Серверный элемент управления задается тегами <asp:Table ID="Table1" runat="server"></asp:Table>. Мощь ASP .NET проявляется при динамическом создании таблицы. Этот элемент управления в ASP .NET используется реже, так как элемент DataGrid позволяет получить те же результаты, имея к тому же привязку к данным. Свойство Rows nаблицs является контейнером строк - элементов TableRow, а они, в свою очередь имеют свойтсво Cell - коллекцию элементов TableCell. Сам TableCell - контейнер любых элементов управления. Их нельзя вставлять в таблицу иначе, чем в один из элементов TableCell. Текст в ячейку можно записать через свойство Cell.Text или вставкой элемента Literal. Строки таблицы могут быть также типа TableHeaderRow и TableFooterRow. Такие строки всегда отображаются на мобильных устройствах с небольшим экраном, даже если таблица большая и для ее просмотра нужна прокрутка. Ячейки таблицы могут быть типа TableHeaderCell - наследника TableCell. Текст в них отображается выделенным полужирным шрифтом и центрирован. В ASP .NET 2.0 у элемента появилась возможность задавать заголовки с помощью свойства Caption. Местоположение заголовка определяется свойством CaptionAlign. При значении Bottom он будет находится под таблицей. При остальных значениях заголовок находится где ему положено - наверху, Left и Right просто выравнивают у левого или правого края. Этот пример иллюстрирует создание таблицы в программном режиме. Игра «Найди число» тренирует внимание и память. В начале игрок вводит размер таблицы n. Программа генерирует квадратную таблицу, где числа от 1 до n^2 написаны на кнопках и перемешаны в случайном порядке.
CalendarЭтот класс не имеет аналогов в html. Определив единственный элемент управления, можно создать и предоставить в распоряжение посетителей полноценный календарь, где они смогут прокручивать месяцы, выбирать день или неделю. Внешний вид этого элемента управления может быть самым разнообразным. И все это реализуется средствами html. Раньше это было возможно только с помощью ActiveX - контролов, которые нужно загружать с сервера, регистрировать в системе и проверять на безопасность. Calendar имеет множество свойств.
Calendar поддерживает различные календарные системы - не только привычный григорианский, но и юлианский, иудейский, мусульманский, буддистский. Это можно сделать, изменяя культурную информацию страницы. Выбор клиентом даты начала путешествия на сайте туристистического агентства.
Если мы посмотрим на HTML-код страницы, которая сгенерирована этой программой, то увидим довольно объемный текст, в том числе функцию на JavaScript и большую таблицу, каждая ячейка которой ссылается на эту функцию. Было бы непросто написать все это самим. Свойства SelectMonthText и SelectWeekText задают символы HTML, по умолчанию > и >> эта последовательность отображается в символы >. С событием выбора даты OnSelectionChanged связан обработчик calSelectChange. В нем мы сначала проверяем, является ли выбранная дата будущей по отношению к сегодняшнему дню. Если да, то создается новая кнопка для подтвержения выбранной даты. Такая строка в Page_Load
сделает календарь таким, какой принят в Таиланде. Не забудьте включить пространство имен глобализации.
Свойство SelectionMode, равное DayWeekMonth, позволяет выбрать как конкретный день, так и неделю или месяц. Как же получить выбранный диапазон дат? SelectedDate возвращает только первый день диапазона. Для этого существует коллекция Calendar1.SelectedDates.
А еще элегантнее будет написать так:
Можно запретить пользователю выбирать прошлую дату. Для этого можно воспользоваться свойством IsSelectable.
Автоформатирование календаряУ календаря не один стиль, а несколько. Разные стили применяются к заголовку, к выходным и будним дням, дням нетекущих месяцев и к сегодняшнему дню. Стили можно задать как с помощью внешних классов, так и непосредственно. Все это просто поражает. Можно поставить календарь на тысячах разных сайтов и везде он будет выглядеть по-разному. В Visual Studio 2005 можно поменять внешний вид календаря с помощью предопределенных шаблонов. У многих элементов управления в режиме дизайна есть «умные ярлычки»(smart tags). В них есть ссылка на диалог автоформатирования календаря. При этом уже сделанные изменения в свойства сохранятся. Внешний вид календаря можно менять в обработчике события DayRender. У аргумента обработчика DayRenderEventArgs два свойства: Cell с типом TableCell - наследника WebControl, и Day типа CalendarDay. В Cell можно добавлять новые элементы, но только такие, которые не запускают событий.
В этом примере проверяется день, и если это 8 марта, то вокруг него рисуется красная рамка. А еще добавляется элемент LiteralControl с текстом, соответствующим моменту. Отправка данных другой страницеВ ASP.NET 1.1 не разрешалась отправка данных между страницами. В ASP.NET 2.0 элементы управления имеют свойство PostBackUrl, где можно указать, какой странице система должна передать Web-форму, если отправление данных на сервер инициировано этим элементом управления. Через свойство PreviousPage страницы можно выяснить, какая страница была источником постбэка нашей страницы. На первой странице рисуется календарь.
А на второй читаются значения первой формы:
ЗаключениеМы рассмотрели только некоторые элементы управления и убедились, что они предоставляют богатые возможности. В следующей лекции мы рассмотрим другой важный класс элементов управления - валидаторы.
|
|