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

Анатомия ASP .NET. ASP .NET в действии

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

Свойства страницы

Страница — это основа всего в web-приложении.

Класс System.Web.UI.Page инкапсулирует функциональность, необходимую для создания и обработки страниц ASP .NET.

Каждая страница ASP .NET — это объект класса, который автоматически генерируется ядром ASP .NET. Класс наследуется от ассоциированного со страницей класса, если мы используем отделенный код, или прямо наследуется от System.Web.UI.Page, если код на C# встроен в страницу. Среда также создает конструктор по умолчанию.

Чтобы убедиться в этом, можем создать страницу "PageType.aspx":

<%@ Page Language="C#" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Тип страницы</title>
</head>
<body>
    <div>
    <% Response.Output.Write("Тип данной страницы 
{0}",this.GetType()); %>
    </div>
     <div>
    <% Response.Output.Write("Базовый тип данной страницы 
{0}",this.GetType().BaseType); %>
    </div>
</body>
</html>

Вот результат:

Тип данной страницы — ASP.pagetype_aspx

Базовый тип данной страницы — System.Web.UI.Page

Такая же страница, созданная по технологии разделения кода,

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageType.aspx.cs"
 Inherits="PageType" %>

пишет результат:

Тип данной страницы — ASP.pagetype_aspx

Базовый тип данной страницы — PageType

То, что PageType — наследник System.Web.UI.Page, прописано в файле отделенного кода:

public partial class PageType : System.Web.UI.Page

К текущему объекту страницы можно обращаться как к переменной Page. Page — это контейнер элементов управления данной страницы, поэтому содержит в себе коллекцию Controls. Если в теге <head> присутствует атрибут runat = "server", то в Page содержится и поле Header, через которое можно управлять заголовком страницы — например, поменять название страницы в заголовке браузера, назначить файл каскадных таблиц стилей:

<script runat="server">
    protected void Page_Init(object sender, EventArgs e)
    {    
        HtmlLink myHtmlLink = new HtmlLink();
        myHtmlLink.Href = "printable.css";
        myHtmlLink.Attributes.Add("rel", "stylesheet");
        myHtmlLink.Attributes.Add("type", "text/css");

        Page.Header.Controls.AddParsedSubObject(myHtmlLink);
        Page.Header.Title = "Новый заголовок";
   }
    protected void Page_Load(object sender, System.EventArgs e)
    {
        Style bodyStyle = new Style();

        bodyStyle.ForeColor = System.Drawing.Color.Blue;
        bodyStyle.BackColor = System.Drawing.Color.Beige;

        Page.Header.StyleSheet.CreateStyleRule(bodyStyle, null, 
"p");

    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Hello ASP.NET</title>
</head>
<body>
	<p>Учитесь программировать на ASP.NET</p>
</body>
</html>

В этом примере мы поменяли текст заголовка. Запустите эту страницу. В получившемся HTML-коде внутри тега <title> стоит уже не "Hello ASP.NET", а "Новый заголовок", который был установлен через Page.Header.Title. Был создан стиль для тега <p>, что отразилось таким образом:

<style type="text/css">
	p { color:Blue;background-color:Beige; }
</style>

Внешняя страница CSS была импортирована из файла:

<link href="printable.css" rel="stylesheet" type="text/css" /> 
<style type="text/css">

Если атрибут AutoEventWireup, который присутствует в заголовке страниц, генерируемых VS, установлен, то методы с префиксом Page_ автоматически назначаются обработчиками событий страницы.

У страницы есть два важных свойства — Response и Request. Свойство Response имеет тип HttpResponse. Response страницы можно воспринимать как выходной поток. Весь HTML-код генерируемой страницы в принципе может быть выведен через запись в этот поток. Это был обычный способ работы разработчиков asp. Но в ASP .NET есть более удобные средства вывода данных с помощью серверных элементов управления. Response лучше использовать для записи Cookies, для задания различных параметров заголовка — управлять кэшированием, свойством Expires.

Вот пример из MSDN:

HttpCookie MyCookie = new HttpCookie("LastVisit");
    DateTime now = DateTime.Now;

    MyCookie.Value = now.ToString();
    MyCookie.Expires = now.AddHours(1);

    Response.Cookies.Add(MyCookie);

Можно поменять кодовую страницу:

<head runat="server">
<%Response.Charset = "windows-1251"; %>
    <title>Русская кодировка</title>
</head>

Функция Response.Redirect перенаправляет браузер на другую страницу:

Response.Redirect("NavigationTarget.aspx?name=" + System.Web.HttpUtility.UrlEncode(Name.Text));

Здесь формируется командная строка с параметрами QueryString, которые целевая страница может прочитать.

Аналогично, свойство Request — это запрос, переданный на сервер для вывода нужной страницы. Он имеет тип HttpRequest. В нем хранится все о клиенте, включая настройки его браузера, файлы-cookie и данные, введенные им в форму:

NameLabel.Text = Server.HtmlEncode(Request.QueryString["Name"]);
< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Алексей Савельев
Алексей Савельев

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