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

Пользовательские и собственные серверные элементы управления

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >

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

Составные элементы управления наследуются от класса Composite Control. Этот элемент представляет собой объединение текстовой строки с валидатором, который проверяет ее значение на соответствие шаблону адреса электронной почты. EnsureChildControls — это метод, который проверяет, существуют ли вложенные элементы. Если нет, вызывается метод CreateChildControl: [DefaultProperty("Text")]

[ToolboxData("<{0}:EmailTextBox 
runat=server></{0}:EmailTextBox>")]
  public class EmailTextBox : CompositeControl, INamingContainer
  {
    private TextBox textBox;
    private RegularExpressionValidator validator;
    [Bindable(true)]
    [Category("Appearance")]
    [DefaultValue("")]
    [Localizable(true)]
    [Themeable(false)]
    public string Text
    {
      get
      {
        EnsureChildControls();
        return textBox.Text;
      }
      set
      {
        EnsureChildControls();
        textBox.Text = value;
      }
    }
    [Themeable(false)]
    public string ErrorMessage
    {
      get
      {
        EnsureChildControls();
        return validator.ErrorMessage;
      }
      set
      {
        EnsureChildControls();
        validator.ErrorMessage = value;
      }
    }
    public override ControlCollection Controls
    {
      get
      {
        EnsureChildControls();
        return base.Controls;
      }
    }
    protected override void CreateChildControls()
    {
      Controls.Clear();

      textBox = new TextBox();
      validator = new RegularExpressionValidator();

      Controls.Add(validator);
      Controls.Add(textBox);

      textBox.ID = "Email1";
      validator.ControlToValidate = textBox.ID;
      validator.ValidationExpression=@"\w+([-+.']\w+)*@\w+([
-.]\w+)*\.\w+([-.]\w+)*";
    }
  }

У элемента управления EmailTextBox имеются свойства Text и ErrorMessage, которые можно определять на страницах aspx.

<cc1:EmailTextBox ID="EmailTextBox1" runat="server"  
Text="Hello" ErrorMessage="Адрес E-mail неправильный!"/>

Заключение

Пользовательские и собственные серверные элементы управления — это реализация в ASP .NET передовой концепции компонентного программирования. Они облегчают повторное использование кода.

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Алексей Савельев
Алексей Савельев

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