|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Серверные элементы управления
Вот код этой страницы в браузере:
<html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Выбор категории товаров</title> </head> <body> <br/> <form name="ctl00" method="post" action="DropDownList.aspx" id="ctl00"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTc3Mjg2Njg5MQ9kFgICAQ9kFgICAw8PFgIeBFRleHQFLtCS0Ys g0LLRi9Cx0YDQsNC70LggINCa0L7QvNC/0LDQutGCLdC00LjRgdC60LhkZGRURXB3F 72jDHrywdZ12h2Cw2f41A==" /> </div> Выберите категорию товаров<br /> <select name="Category" id="Category"> <option value=" Компьютеры "> Компьютеры </option> <option value="Принтеры">Принтеры</option> <option value=" Комплектующие "> Комплектующие </option> <option value=" Мониторы "> Мониторы </option> <option selected="true" value=" Компакт-диски"> Компакт- диски</option> </select> <input type="Submit"> <br /> <span id="lblMessage">Вы выбрали Компакт-диски</span> <div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDA- TION" value="/wEWBgKTtKPTDgLc5pLAAgLxxYKuBALL14rfCALaoI/9AgLP6q/dC9yI/KG 10xK67UImbEUJkicDdslR" /> </div></form> </body> </html>
Итак, браузеру посылается простая страница, на которой нет скриптов. То же поведение можно было бы запрограммировать с помощью JavaScript. Разница в том, что пользователь смог бы увидеть код на JavaScript, скопировать и использовать его на своих страницах. В этом нет ничего плохого, но иногда люди хотят сохранить свой код в тайне в целях защиты интеллектуальной собственности.
Посмотрим, как ASP .NET интерпретировал заголовок формы:
<form name="ctl00" method="post" action="DropDownList.aspx" id="ctl00">
Атрибуты name и id он сгенерировал самостоятельно. Их значение одинаково, разные браузеры позволяют обращаться к элементам формы по-разному: IE — через id, а Netscape Navigator — через name. Атрибуты method и action тоже не были указаны нами, он сгенерировал их по умолчанию как post и текущая страница.
А что значит скрытый элемент разметки, который мы видим на каждой сгенерированной ASP .NET странице? Это поле, сохраняющее состояние формы. Раньше форма была отдельной страницей, и когда она отправляла серверу данные, он генерировал совершенно другую страницу. В ASP .NET форма подает себя сама, она работает на входе и на выходе.
Поэтому через специальное скрытое поле передаются значения данных формы. Если бы этого не было, в выпадающем списке всегда были бы выбраны мониторы. Информация в этом поле хранится в закодированном виде, но сервер может ее раскодировать.
Свойство Items элемента управления DropDownList имеет несколько методов для добавления и удаления строк. Используя методы Add и Insert, можно добавить элемент или вставить его в указанную позицию в DropDownList ; AddRange позволяет добавить массив элементов в DropDownList ; метод Clear удаляет все элементы; методы Remove и RemoveAt удаляют указанный элемент или элемент, находящийся в указанной позиции соответственно. Например, так можно программно создать DropDownList в функции Page_Load:
Category = new DropDownList();
Category.Items.Add("Компьютеры");
Category.Items.Add("Принтеры");
Category.Items.Add("Комплектующие");
ListItem selItem = new ListItem("Мониторы", "мониторы");
Category.Items.Add(selItem);
Category.Items.Add(new ListItem("Компакт-диски"));
Category.SelectedIndex = 3;Чтобы очистить выбор в элементе DropDownList, установите SelectedIndex в (-1).
Если установить у ListItem свойство Enable в false, то он будет не виден в списке, однако с ним можно работать из программы. Событие SelectedIndexChanged запускается, когда пользователь выбирает другой элемент.
ListBox
Если у тега < select > указать атрибут SIZE, больший 1 (значение по умолчанию), то получим простой невыпадающий список. Ему соответствует < asp:ListBox >.
Элемент управления позволяет выбрать несколько пунктов списка одновременно. Для этого надо установить его свойство SelectionMode:
SelectionMode="multiple"
Свойство Rows устанавливает количество элементов, которые видны в листе. Если элементов больше, то появляется полоса прокрутки.
Свойство Items возвращает коллекцию элементов ListItem, которые находятся в списке. Оно позволяет определить выбранные пункты.
Представьте, что мы разрабатываем сайт туристического агентства. Посетителю предоставляется возможность выбрать несколько городов для своего маршрута из имеющегося списка. Смотрим код:
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load()
{
string msgCitiesList = "";
if (Page.IsPostBack)
foreach (ListItem it in cities.Items)
if (it.Selected)
{
msgCitiesList = msgCitiesList + it.Text + "<br />";
}
if (msgCitiesList != "")
{
Message.Text = "Вы выбрали следующие города: <br />" +
msgCitiesList;
}
else
{
Message.Text = "";
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Пример ListBox</title>
</head>
<body>
Какие города вы хотите включить в свой маршрут?<br />
<form id="Form1" runat="server">
<asp:ListBox ID="cities" runat="server" SelectionMode="multiple">
<asp:ListItem>Лондон</asp:ListItem>
<asp:ListItem>Мадрид</asp:ListItem>
<asp:ListItem>Париж</asp:ListItem>
<asp:ListItem>Рига</asp:ListItem>
</asp:ListBox><br />
<input type="Submit">
<p>
<asp:Label ID="Message" runat="server" /><br />
</form>
</body>
</html>Событие SelectedIndexChanged имеется и тут, как и у всех классов-наследников от абстрактного класса ListControl.