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

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

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

TextBox

Он заменяет элементы разметки < textbox > и < textarea >. Они оба вводят текст, только < textbox > — однострочный, а < textarea > — многострочный. Соответственно, при свойстве textmode, равном MultiLine, получится многострочное поле ввода, а при SingleLine — однострочное. Если textmode равен Password, введенные данные заменяются звездочками, как при < Input Type="Password" >. Естественно, это нужно в основном для ввода пароля.

Свойство rows задается при textmode, установленном в MultiLine, и задает количество строк для ввода. Аналогично функционирует свойство columns — количество символов в строке.

Если свойство Wrap установлено, то текст переходит на новую строчку, чтобы полностью помещаться в окне. Эта возможность должна быть хорошо известна по текстовым редакторам:

<script runat="server" language="C#">
  void Page_Load()
  {
    if (Page.IsPostBack)
    {
      if (txtName.Text != "")
        lblName.Text = "Вы ввели имя:" + txtName.Text;
      if (txtAddress.Text != "")
        lblAddress.Text = "Вы ввели адрес:" +
      txtAddress.Text;
      if (txtPassword.Text != "")
        lblPassword.Text = "Вы ввели пароль:" +
          txtPassword.Text + "<br>Спасибо за регистрацию!";
      input.Visible = false;
    }
  }


</script>

<html xmlns=""http://www.w3.org/1999/xhtml"">
<head>
  <title>Регистрация нового пользователя</title>
</head>
<body>
  <form runat="server" id="input">
    <div style="text-align: left">
      <table>
        <tr>
          <td style="width: 100px">
            Введите имя:
          </td>
          <td style="width: 100px">
            <asp:TextBox ID="txtName" runat="server" /></td>
        </tr>
        <tr>
          <td style="width: 100px">
            Введите адрес:</td>
          <td style="width: 100px">
            <asp:TextBox ID="txtAddress" runat="server" 
TextMode="multiline" Rows="5" Wrap="true" /></td>
        </tr>
        <tr>
          <td style="width: 100px">
            Введите пароль:</td>
          <td style="width: 100px">
            <asp:TextBox ID="txtPassword" runat="server" 
TextMode="password" /></td>
        </tr>
      </table>
    </div>
    <br />
    <input type="Submit"><br />
  </form>
  <br />
  <asp:Label ID="lblName" runat="server" /><br />
  <asp:Label ID="lblAddress" runat="server" /><br />
  <asp:Label ID="lblPassword" runat="server" /><br />
</body>
</html>

За счет манипулирования свойством видимости формы одна и та же страница выглядит совершенно по-разному до и после постбэка. На входе видна форма, а на выходе — результат, и так как форма скрыта, никакого кода для нее не генерируется.

Сохраните эту форму в файле Registration.aspx, мы к ней еще вернемся.

У всех классов, унаследованных от WebControl, в ASP .NET 2.0 появился метод Focus(). Он устанавливает фокус в элемент управления. Чаще всего применяется именно к TextBox. Добавьте txtName. Focus() в событие Page_Load(), и курсор при загрузке страницы уже будет установлен в нужной строке ввода.

RadioButton

Переключатели не ходят в одиночку. Один переключатель на странице не имеет смысла. Нужны хотя бы два. Типичный набор переключателей определяется так:

<asp:RadioButton ID="RadioButton1" Runat="server" Text="Yes" 
GroupName="Set1" />
<asp:RadioButton ID="RadioButton2" Runat="server" Text="No" 
GroupName="Set1"/>

Атрибут Text выводится справа от переключателя. В этом примере важно, что у обоих переключателей совпадает свойство GroupName. Это позволяет им работать как одно целое. Преимущество отдельных переключателей над RadioButtonList в том, что между переключателями можно поместить любой текст, картинки и другие элементы.

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

<%@ Page Language="C#" %>
<script runat="server">

    protected void option1_CheckedChanged(object sender, 
EventArgs e)
    {
        if(option1.Checked)
            Message.Text = "Вы выбрали " + option1.Text;
        if (option2.Checked)
            Message.Text = "Вы выбрали " + option2.Text;
        if (option3.Checked)
            Message.Text = "Вы выбрали " + option3.Text;
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Шуточное голосование</title>
</head>
<body>
<br /><br />
У кого самые мохнатые лапы в мире?<br /><br />
<form runat="server" id="voting">

<asp:RadioButton id="option1" runat="server" Text="медведя" 
OnCheckedChanged="option1_CheckedChanged" AutoPostBack = "true" 
GroupName="Choice" /><br />
<asp:RadioButton id="option2" runat="server" Text="мохноногого 
тушканчика" OnCheckedChanged="option1_CheckedChanged" 
GroupName="Choice" AutoPostBack = "true" /> <br />
<asp:RadioButton id="option3" runat="server" Text="хоббитов" 
OnCheckedChanged="option1_CheckedChanged" AutoPostBack = "true" 
GroupName="Choice"/><br />
<br /><br />
</form>
<asp:Label id="Message" runat="server" />
</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