DropDownList
Аналог этого элемента в HTML — выпадающие меню. Они задаются с помощью тегов <SELECT> и </SELECT>, между которыми находятся один или несколько тегов:
<OPTION>. <BR>Каталог <SELECT NAME="Выбор"> <OPTION>Компьютеры <OPTION>Принтеры <OPTION VALUE="Комплектующие"> Комплектующие <OPTION SELECTED>Мониторы <OPTION>Компакт-диски </SELECT>
DropDownList выдаст тот же самый код, если будет определен так:
<asp:DropDownList id="Выбор" runat="server"> <asp:ListItem> Компьютеры </asp:ListItem > <asp:ListItem >Принтеры</asp:ListItem > <asp:ListItem > Комплектующие </asp:ListItem > <asp:ListItem Selected="true"> Мониторы </asp:ListItem > <asp:ListItem > Компакт-диски</asp:ListItem > </asp:DropDownList >
Итак, если мы хотим перейти с написания страниц HTML к написанию кода ASP:
<asp:DropDownList> пишется вместо <SELECT> <asp:ListItem > вместо <OPTION>
Вместо атрибута NAME пишем атрибут id.
Вместо атрибута SELECTED пишем атрибут Selected и присваиваем ему true.
Атрибут VALUE можно задать и в HTML. Если его нет, ASP .NET генерирует его из текста ListItem:
<select name="Выбор" id="Выбор"> <option value=" Компьютеры "> Компьютеры </option> <option value="Принтеры">Принтеры</option> <option value=" Комплектующие "> Комплектующие </option> <option selected="selected" value=" Мониторы "> Мониторы </option> <option value=" Компакт-диски"> Компакт-диски</option> </select>
Отличие серверных элементов управления в том, что их можно программировать на сервере и получать информацию от них тоже на сервере.
Попробуем написать такую страницу:
<%@ Page Language="C#" %>
<script runat="server" language="C#"> void Page_Load() { if (Page.IsPostBack) lblMessage.Text = "Вы выбрали " + Category.SelectedItem.Value; } </script>
<html xmlns=""http://www.w3.org/1999/xhtml""> <head> <title>Выбор категории товаров</title> </head> <body> <br /> <form id="Form1" runat="server"> Выберите категорию товаров<br /> <asp:DropDownList ID="Category" runat="server"> <asp:ListItem> Компьютеры </asp:ListItem> <asp:ListItem>Принтеры</asp:ListItem> <asp:ListItem> Комплектующие </asp:ListItem> <asp:ListItem Selected="true"> Мониторы </asp:ListItem> <asp:ListItem> Компакт-диски</asp:ListItem> </asp:DropDownList> <input type="Submit"> <br /> <asp:Label ID="lblMessage" runat="server" /> </form> </body> </html>
Запустите ее на выполнение, выберите "Компакт-диски" и нажмите на кнопку. На форме появится надпись "Вы выбрали Компакт-диски".
Выберите категорию товаров<br /> <select name="Category" id="Category"> <option value=" Компьютеры "> Компьютеры </option> <option value="Принтеры">Принтеры</option> <option value=" Комплектующие "> Комплектующие </option> <option value=" Мониторы "> Мониторы </option> <option selected="selected" 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 запускается, когда пользователь выбирает другой элемент.