Спонсор: Microsoft
Опубликован: 14.11.2006 | Доступ: свободный | Студентов: 5820 / 513 | Оценка: 4.18 / 3.74 | Длительность: 16:37:00
ISBN: 978-5-9556-0085-7
Лекция 3:

Серверные элементы управления

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

RadioButtonList

Группа переключателей работает так, что выбор одного элемента из группы снимает выбор с других. Этот элемент управления подходит для выбора одного правильного ответа из нескольких:

<asp:RadioButtonList id="radSample" runat="server">
<asp:ListItem id="option1" runat="server" value="Option A" />
<asp:ListItem id="option2" runat="server" value="Option B" />
<asp:ListItem id="option3" runat="server" value="Option C" />
</asp:RadioButtonList>

Свойство radSample.SelectedItem.Value показывает выбранный элемент.

На форуме RSDN каждый участник может открыть голосование по интересующему его вопросу. Вот одно из этих голосований:

<%@ Page Language="C#" %>
<script runat="server">
void Page_Load()
{
    if (Page.IsPostBack)
    {
    if( radVoting.SelectedItem==null)
        Message.Text = "Надо выбрать вариант";
        else
        {
        Message.Text = "Спасибо за участие. Вы выбрали: " + 
radVoting.SelectedItem.Value;
        voting.Visible=false;
        }
    }
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title> Что вы думаете о сайте intuit.ru? </title>
</head>
<body>
<br /><br /> <asp:label runat="server" ID="Question" Font-
Bold="True" Font-Size="Large" ForeColor="#0000C0">Что вы думаете 
об онлайн-университете intuit.ru? </asp:label>
<br /><br />
<form runat="server" id="voting">
<asp:RadioButtonList id="radVoting" runat="server"  >
<asp:ListItem value="Хороший сайт, учился там" />
<asp:ListItem value="Есть интересные курсы, причем в открытом 
доступе" />
<asp:ListItem value="Не бывал(а), пойду посмотрю" />
<asp:ListItem value="Посмотрел(а), записался на курсы" />
</asp:RadioButtonList>
<input type="Submit" value="Проголосовать!" >
<br /><br />
</form>
<asp:Label id="Message" runat="server" />
</body>
</html>

Ну конечно, в случае настоящего голосования нужно еще и запомнить где-то результаты. Попробуем это освоить в следующих лекциях.

CheckBoxList

Некоторые голосования предполагают возможность выбора больше одного варианта. Так же реализованы и тесты, которые вы проходите в конце лекций.

<asp:Label ID="Label1" runat="server" Text="Как 
реализуется связывание с данными в ваших ASP.NET 2.0 
приложениях?"></asp:Label>
    <asp:CheckBoxList ID="CheckBoxList1" runat="server">
        <asp:ListItem>На каждой страничке создаётся 
SqlDataSource, с ним идёт декларативное связывание.</asp:ListItem>
        <asp:ListItem>В проекте есть DataSet, на страничках 
ObjectDataSourcе'ы, и с ними декларативное 
связывание.</asp:ListItem>
        <asp:ListItem>Недекларативное связывание, запрос 
прописан на каждой страничке.</asp:ListItem>
        <asp:ListItem>Недекларативное связывание с 
использованием одного большого DataSet'а</asp:ListItem>
    </asp:CheckBoxList>

Если в CheckBoxList множество вариантов, то можно их расположить в несколько столбцов. При этом можно двигаться сверху вниз — справа налево, или наоборот. Это зависит от RepeatDirectionHorizontal или Vertical. Текст может быть расположен справа или слева от флажка.

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="true" 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>

Запустите ее на выполнение, выберите "Компакт-диски" и нажмите на кнопку. На форме появится надпись "Вы выбрали Компакт-диски".

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
Алексей Савельев
Алексей Савельев

https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx

Денис Прокофьев
Денис Прокофьев

Везде написано, что это самый независимый и простой в использовании навигационный элемент управления, что он работает сразу с web.sitemap и не требует определения SiteMapDataSource.

Моя карта сайта состоит из двух страниц, вложенных друг в друга. asp:Menu, asp:TreeView отбображаются как ожидалось, а вот asp:SiteMapPath - нет. Он не виден нигде. Однако на его месте формируется разметка: <span id="SiteMapPath1"><a href="#SiteMapPath1_SkipLink" style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;">Проход по ссылкам навигации</a><a id="SiteMapPath1_SkipLink"></a></span> - т.е. элемент отрабатывает.

В словах xHTML это выглядит так: <asp:SiteMapPath ID="SiteMapPath1" runat="server" />. Причем не важно - внутри тега form или снаружи - всегда одинаково.

Т.к. другие нав. ЭУ работают через простой источник данных без ошибок, делаю вывод - карта составлена правильно. ИД: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

Карта: <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/L11_1_simplePage.aspx" title="Страница 1"  description="Простая страница 1." >
    <siteMapNode url="~/L11_1SimplePage2.aspx" title="Страница 2"  description="Простая страница 2" />
  </siteMapNode>
</siteMap>

Почему так происходит? Вроде делаю все по примерам. VS Community 2015. NetFramework в проекте: v4.0.30319

Александр Шнайдман
Александр Шнайдман
Израиль, Тель Авив