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

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

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

Panel

Часто бывает нужно вставить элемент управления в точно определенное место страницы. Например, объединим два предыдущих примера:

<%@ Page Language="C#" %>
<%@ import Namespace="System.Drawing" %>
<script runat="server">

    void Page_Load()
    {

         Label ShopNews = new Label();
         ShopNews.Text = "Новости торговой площадки";
         ShopNews.Font.Size=20;
         ShopNews.ForeColor=Color.Red;
         ShopNews.BackColor=Color.LightGray;
         ShopNews.BorderWidth=4;
         ShopNews.BorderStyle=BorderStyle.Groove;
         ShopNews.Height=50;
         ShopNews.Width=500;

         frmDemo.Controls.Add(ShopNews);

    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="frmDemo" 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 >
<br/>
<input type="Submit" value="Выбрать">
<br/><br/>
<asp:Label id="lblMessage" runat="server"/>
</form>
</body>
</html>

Рис. 3.2.

Эта страница работает не так, как нам хотелось. Текст оказался после выпадающего списка, хотя логичней было бы, чтобы текст шел в начале. В HTML для этого используют элемент разметки < DIV > — стандартный контейнер. Его аналог в ASP .NET:

— 
<asp:Panel>.

Чтобы заставить метку отображаться перед списком, необходимо поместить перед DropDownList объект Panel:

<asp:Panel ID="Panel1" runat="server"></asp:Panel><br />

после чего вызывать метод Controls.Add(...) от этого объекта:

Panel1.Controls.Add(ShopNews);

Рис. 3.3.

Свойство HorizontalAlign элемента Panel полезно, если нужно установить выравнивание содержащихся в нем элементов управления. Поменяем код в предыдущем примере:

<asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center" 
width=500 />

Текст теперь размещается в центре метки.

Булевское свойство Wrap элемента Panel заставляет переносить текст на новую строку, если оно установлено, или расширять раздел, когда текст не помещается в одну строку, если оно не установлено.

Если в программе установить свойство Visible панели в False, можно сделать невидимыми все элементы, которые в нем находятся. Стили, установленные в панели, наследуются всеми вложенными элементами.

Новая возможность в ASP .NET 2.0 — задавать для Panel полосы прокрутки, как бы имитируя встроенное в страницу окно. Это делается с помощью свойства ScrollBars. Он может принимать следующие значения: None, Both, Vertical, Horizontal, Auto. Если вы установите его в Auto, полосы прокрутки появятся, когда содержимое панели не умещается в ее видимые размеры:

<asp:Panel ID="Panel1" runat="server" Height="140px" 
Width="494px" ScrollBars="Auto" HorizontalAlign="Left">
            </asp:Panel>
    protected void Page_Load(object sender, EventArgs e)
    {
        for(int i=0;i<100;i++)
        {
            Literal l=new Literal();
            l.Text = "Мой дядя самых честных правил,<br>Когда не 
в шутку занемог<br><br>";
            this.Panel1.Controls.Add(l);
        }
    }

Реализуется такая возможность с помощью атрибута css overflow:

<div id="Panel1" style="height:140px;width:494px; 
overflow:auto;text-align:left;">

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

Ставить свойство ScrollBars в Vertical или Horizontal я вам не рекомендую. Генерируется overflow-x, а это не работает в браузере Opera 9.0. overflow не поддерживается IE 6.0.

Вертикальную полосу прокрутки можно установить и слева. Для этого поменяйте свойство Direction в RightToLeft.

Для Panel можно задать фоновую картинку с помощью свойства BackImageUrl.

Заключение

Серверные элементы управления предоставляют в распоряжение программиста свойства, методы и события. При их помощи мы можем абстрагироваться от деталей 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