Тарифы Услуги Сим-карты

Класс Page. Кто они, эти Эталонные страницы? Динамические страницы в ASP.NET

ASP.NET master pages allow you to create a consistent layout for the pages in your application. A single master page defines the look and feel and standard behavior that you want for all of the pages (or a group of pages) in your application. You can then create individual content pages that contain the content you want to display. When users request the content pages, they merge with the master page to produce output that combines the layout of the master page with the content from the content page.

How Master Pages Work

Master pages actually consist of two pieces, the master page itself and one or more content pages.

Master Pages

A master page is an ASP.NET file with the extension .master (for example, MySite.master) with a predefined layout that can include static text, HTML elements, and server controls. The master page is identified by a special directive that replaces the directive that is used for ordinary .aspx pages. The directive looks like the following.

The @ Master directive can contain most of the same directives that a directive can contain. For example, the following master-page directive includes the name of a code-behind file, and assigns a class name to the master page.

In addition to the @ Master directive, the master page also contains all of the top-level HTML elements for a page, such as html, head, and form. For example, on a master page you might use an HTML table for the layout, an img element for your company logo, static text for the copyright notice, and server controls to create standard navigation for your site. You can use any HTML and any ASP.NET elements as part of your master page.

Replaceable Content Placeholders

In addition to static text and controls that will appear on all pages, the master page also includes one or more controls. These placeholder controls define regions where replaceable content will appear. In turn, the replaceable content is defined in content pages. After you have defined the controls, a master page might look like the following.

Master page title

Master page title

Content Pages

You define the content for the master page"s placeholder controls by creating individual content pages, which are ASP.NET pages (.aspx files and, optionally, code-behind files) that are bound to a specific master page. The binding is established in the content page"s @ Page directive by including a attribute that points to the master page to be used. For example, a content page might have the following @ Page directive, which binds it to the Master1.master page.

In the content page, you create the content by adding controls and mapping them to controls on the master page. For example, the master page might have content placeholders called Main and Footer. In the content page, you can create two controls, one that is mapped to the control Main and the other mapped to the control Footer, as shown in the following figure.

Replacing placeholder content

In general, this structure has no effect on how you construct your pages or program them. However, in some cases, if you set a page-wide property on the master page, it can affect the behavior of the content page, because the master page is the closest parent for the controls on the page. For example, if you set the property on the content page to true but set the same property to false in the master page, view state will effectively be disabled because the setting on the master page will take priority.

Master Page and Content Page Paths

When a content page is requested, its content is merged with the master page, and the page runs in the context of the content page. For example, if you get the property of the object, whether in content page code or in master page code, the path represents the location of the content page.

The master page and content page do not have to be in the same folder. As long as the attribute in the content page"s @ Page directive resolves to a .master page, ASP.NET can merge the content and master pages into a single rendered page.

Referencing External Resources

Both the content page and master page can contain controls and elements that reference external resources. For example, both might contain image controls that reference image files, or they might contain anchors that reference other pages.

The context for the merged content and master pages is that of the content page. This can affect how you specify URLs for resources, such as image files and target pages, in anchors.

Server Controls

In server controls on master pages, ASP.NET dynamically modifies the URLs of properties that reference external resources. For example, you might put an control on a master page and set its property to be relative to the master page. At run time, ASP.NET will modify the URL so that it resolves correctly in the context of the content page.

ASP.NET can modify URLs in the following cases:

    The URL is a property of an ASP.NET server control.

    The property is marked internally in the control as being a URL. (The property is marked with the attribute .) In practical terms, ASP.NET server control properties that are commonly used to reference external resources are marked in this way.

Other Elements

ASP.NET cannot modify URLs on elements that are not server controls. For example, if you use an img element on a master page and set its src attribute to a URL, ASP.NET will not modify the URL. In that case, the URL will be resolved in the context of the content page and create the URL accordingly.

In general, when working with elements on master pages, it is recommended that you use a server control, even for elements that do not require server code. For example, instead of using an img element, use an server control. That way, ASP.NET can resolve URLs correctly and you can avoid maintenance issues that might arise if you move the master or content page.

For more information about specifying paths for ASP.NET server controls, see ASP.NET Web Site Paths .

Master Pages and Themes

You cannot directly apply an ASP.NET theme to a master page. If you add a theme attribute to the @ Master directive, the page will raise an error when it runs.

However, themes are applied to master pages under these circumstances:

    If a theme is defined in the content page. Master pages are resolved in the context of content pages, so the content page"s theme is applied to the master page as well.

    If the site as a whole is configured to use a theme by including a theme definition in the element.

Scoping Master Pages

You can attach content pages to a master page at three levels:

    At the page level You can use a page directive in each content page to bind it to a master page, as in the following code example.

    At the application level By making a setting in the pages element of the application"s configuration file (Web.config), you can specify that all ASP.NET pages (.aspx files) in the application automatically bind to a master page. The element might look like the following.

    If you use this strategy, all ASP.NET pages in the application that have controls are merged with the specified master page. (If an ASP.NET page does not contain controls, the master page is not applied.)

    At the folder level This strategy is like binding at the application level, except that you make the setting in a Web.config file in one folder only. The master-page bindings then apply to the ASP.NET pages in that folder.

Привет w3ii в HTML

Этот код показывает пример как HTML страницы:




Hello w3ii!


firstpage.htm », а также создать ссылку на файл, как это: firstpage.htm

Привет w3ii в ASP.NET

Самый простой способ, чтобы преобразовать страницу HTML в ASP.NET страницу, чтобы скопировать файл HTML в новый файл с .aspx расширения.

Этот код показывает наш пример, как на странице ASP.NET:




Hello w3ii!


Если вы хотите попробовать это самостоятельно, сохранить код в файле под названием « firstpage.aspx », а также создать ссылку на файл, как это: firstpage.aspx

Как это работает?

Фундаментально страница с ASP.NET точно такой же, как HTML-страницы.

HTML страница имеет расширение.htm. Если браузер запрашивает страницу HTML с сервера, сервер отправляет страницу в браузер без каких-либо изменений.

Страница ASP.NET имеет расширение.aspx. Если браузер запрашивает страницу ASP.NET, сервер обрабатывает любой исполняемый код страницы, до того, как результат отправляется обратно в браузер.

Страница ASP.NET выше, не содержит какой-либо исполняемый код, так что ничего не выполняется. В следующих примерах мы добавим исполняемый код страницы, чтобы продемонстрировать разницу между статической HTML-страницами и динамическими страницами ASP.

Классический ASP

Активные серверные страницы (ASP) были вокруг в течение нескольких лет. С ASP, исполняемый код может быть размещен внутри HTML-страниц.

Предыдущие версии ASP (before ASP .NET) часто называют классический ASP.

ASP.NET не полностью совместит с классическим ASP, но большинство страниц Классического ASP будут работать нормально, как страницы ASP.NET, лишь с незначительными изменениями.

Если вы хотите узнать больше о классическом ASP, пожалуйста, посетите наш ASP Учебник .

Динамические страницы в классическом ASP

Чтобы продемонстрировать, как ASP может отображать страницы с динамическим содержимым, мы добавили некоторый исполняемый код (in red) в предыдущем примере:




Hello w3ii!




Код внутри теги выполняется на сервере.

Response.Write является ASP код для записи что-то в выходной HTML поток.

Now() является функцией возврата серверов текущей даты и времени.

Если вы хотите попробовать это самостоятельно, сохранить код в файле под названием « dynpage.asp », а также создать ссылку на файл, как это: dynpage.asp

Динамические страницы в ASP .NET

Этот код отображает наш пример, как на странице ASP.NET:




Hello w3ii!




Если вы хотите попробовать это самостоятельно, сохранить код в файле под названием « dynpage.aspx », а также создать ссылку на файл, как это: dynpage.aspx

ASP.NET против классического ASP

Предыдущие примеры не демонстрируют каких-либо различий между ASP.NET и классический ASP.

Как вы можете видеть из двух последних примеров нет никаких различий между этими двумя страницами ASP и ASP.NET.

В следующих главах вы увидите, как серверные элементы управления ASP.NET сделать более мощным, чем классический ASP.

Как известно, большинство сайтов имеют однотипную, общепринятую разметку страниц, неотъемлемой частью которой является верхний и нижний колонтитулы и, пожалуй, самая главная часть - тело страницы, хотя конечно, бывают и исключения. ASP .NET 2.x предлагает уникальный метод создания одинаковой разметки для страниц сайта - это использование, так называемых, эталонных страниц . Если вы работали с ранними версиями ASP (ASP , ASP .NET 1.x ), то, наверное, помните, что постоянно приходилось копировать HTML -код страницы с элементами ASP . Конечно, использование включаемых файлов (include) в классическом ASP , и пользовательских элементов управления (*.ascx ) в ASP .NET 1.x , значительно упрощало разработку Web-сайтов, но это не сравнится с тем, что предлагает ASP .NET 2.x .

Кто они, эти Эталонные страницы?

И так, что же такое эталонная страница? Эталонная страница - это файл с расширением *.master , он практически ни чем не отличается от уже знакомых вам файлов aspx-страниц. Эталонная страница представляет собой контейнер для контента и может содержать html-разметку страницы, html-элементы, серверные элементы управления и пользовательские элементы управления. Другими словами, эталонная страница содержит разметку страницы, те же самые верхний и нижний колонтитул, меню навигации, в общем все, что фактически отображается на всех страницах сайта, а также эталонная страница содержит одно или более полей для подстановки контента (см. рис. 1). Сам контент при этом находится на страницах aspx , которые в свою очередь ссылаются на эталонную страницу. Таким образом, разработчику больше не придется дублировать разметку страниц, поскольку она будет находиться в одном файле.

Работа с эталонными страницами

Как я уже говорил, эталонная страница очень похожа на страницы aspx , но имеет ряд отличий. Так, вместо директивы @Page , эталонная страница имеет директиву @Master . Директива @Master имеет такой же набор параметров, как и @Page , наиболее часто применяются следующие параметры: Language - указывает язык, на котором пишется код; Debug - указывает на состояние режима отладки; Inherits - содержит имя класса отдельного кода; ClassName - задает имя класса, создаваемого при обработке страницы; EnabledTheming - определяет состояние использования тем; Src - задает имя исходного файла с классом отдельного кода.

Здесь стоит отметить, что указанные параметры в директиве @Master не наследуются дочерними страницами (страницами контента), а используются только в рамках эталонной страницы. Так например, аргумент Language у эталонной страницы может иметь значение C# , а у страниц контента - VB .

На эталонных страницах также можно использовать те же директивы, что и на страницах aspx, например @Register , @Import и т.д.

Каждая эталонная страница (их может быть несколько в одном проекте, в зависимости от структуры сайта и потребностей, например, для форума одна эталонная страница, для остальной части сайта - другая) должна иметь как минимум один элемент ContentPlaceHolder , который собственно и является контейнером для контента. Элемент ContentPlaceHolder обычно пустой, но он также может содержать контент, который будет отображаться по умолчанию, в случае, если на страницах aspx не будет контента. Сам контент находится в элементе Content на страницах aspx. Управляющий элемент Content является основным элементом страницы контента и работает только совместно с элементом ContentPlaceHolder .

А также, ссылка на эталонную страницу может находится в файле web.config , в этом случает, эталонная страница будет применяться ко всем страницам aspx , находящимся в одной папке с web.config (либо ко всему приложению, если web.config находится в корневом каталоге приложения), например:

< configuration >

< system.web >

< pages masterPageFile = "~/MsterPage.master " >

Помимо этого, эталонную страницу можно указать во время выполнения программы, для этого нужно в обработке события Page_PreInit изменить свойство MsterPageFile . Например:

Protected Sub Page_Init(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Init

Me.MasterPageFile= " ~/NewMasterPage.master"

End Sub

Обратите внимание, данный код вызовет ошибку, если на странице aspx в директиве @Page будет указан аргумент MasterPageFile.

Следует также отметить, что сами эталонные страницы могут ссылаться на другие эталонные страницы, для этого нужно указать путь к эталонной странице в аргументе MasterPageFile директивы @Master.

От теории к практике

И так, пожалуй теории достаточно, перейдем к практическому использованию эталонных страниц. Для начала, сделаем простую эталонную страницу, назовем ее MasterPage.master :

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

< html xmlns ="http://www.w3.org/1999/xhtml">

< head runat ="server">

< title > Простой пример работы с эталонными страницами

< body >

< form id ="form1" runat ="server">

< div >

< h1 > Этот шаблон дизайна будет на всех страницах контента

< hr />

< asp : ContentPlaceHolder ID ="ContentPlaceHolder1" runat ="server">

< hr />

< div style ="text-align: center">

Copyrght (c) Просто коопирайт

Обратите внимание на элемент ContentPlaceHolder . Наличие этого элемента в эталонной странице обязательно, как я уже говорил, он служит элементом-контейнером для контента.

Теперь, создадим несколько aspx страниц с контентом, которые будут ссылаться на нашу эталонную страницу. Первая страница, по сложившейся традиции и стандартам, будет назваться Default.aspx

< asp : Content ID ="Content1" ContentPlaceHolderID ="ContentPlaceHolder1" Runat ="Server">

Привет, это контент главной страницы!< br />

< a href ="Second.aspx"> Перейти на другую страницу

Обратите внимание на аргумент MasterPageFile в директиве @Page , который указывает на файл эталонной страницы, в нашем случае это файл MasterPage.master , который находится в корневом каталоге приложения.

Как видите, страница контента не содержит тэгов , , и , поскольку эти тэги уже есть в нашей эталонной странице. Обратите внимание на элемент Content , в частности на его параметр ContentPlaceHolderID - здесь указывает имя контейнера контента в эталонной странице, т.е. имя элемента ContentPlaceHolder , в который будет вставлен контент. В самом элементе Content содержится текст контента, помимо текста здесь могут содержаться любые допустимые элементы aspx-страниц.

Теперь создайте еще одну aspx-страницу, назовите ее Second:

< asp : Content ID ="Content1" ContentPlaceHolderID ="ContentPlaceHolder1" Runat ="Server">

А тут у нас контент второй страницы страницы!< br />

< a href =" Default .aspx"> Перейти на главную страницу

Теперь запустите проект и ASP .NET соединит эталонную страницу со страницей контента.

Доступ к свойствам эталонной страницы

Доступ к объектной модели эталонной страницы возможен через свойство Master , однако если попытаться обратиться напрямую к эталонной странице, то произойдет ошибка. Это связано с тем, что эталонная страница представляет собой ссылку на объект эталонной страницы и предоставляет доступ только для открытых свойств и методов.

Для примера, разместите на эталонной странице элемент Label и назовите его lblTitle. Чтобы получить возможно изменять текст этого элемента, нужно создать соответствующие свойства в классе эталонной страницы:

Public Property MyTitle() As String

Get

MyTitle = lblTitle.Text

End Get

Set (ByVal value As String )

lblTitle.Text = value

End Set

End Property

Теперь, вы можете динамически изменить, либо получить, текст в элементе lblTitle эталонной страницы, например, при обработке события загрузки aspx-страницы:

Protected Sub Page_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

CType (Master, MasterPage).MyTitle = " Привет !"

End Sub

Вот собственно и все, если у вас возникнут какие либо вопросы, пишите, постараюсь ответить.

Последнее обновление: 31.10.2015

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

По умолчанию при создании нового проекта ASP.NET MVC 5 в проект уже добавляется мастер-страница под названием _Layout.chtml , которую можно найти в каталоге Views/Shared . В приложении из второй главы мы ее изменили следующим образом:

@ViewBag.Title @RenderBody()

На первый взгляд это обычное представление за одним исключением: здесь используется метод @RenderBody() , который является заместителем и на место которого потом будут подставляться другие представления, использующие данную мастер-страницу. В итоге мы сможем легко установить для представлений веб-приложения единообразный стиль.

Чтобы в представлении использовать мастер-страницу, нам надо в секции Layout указать путь к нужной мастер-странице. Например, в представлении Index.cshtml можно определить мастер-страницу так:

Если мы не используем мастер-страницу, то указываем Layout = null; .

Также необязательно для всех представлений использовать одну и ту же мастер-страницу. Можно определить несколько мастер-страниц, например, одну для форума, одну для блога и т.д., и в зависимости от раздела сайта подключать нужную. Добавляются в проект они также как и обычные представления.

Мастер-страница может иметь несколько секций, куда представления могут поместить свое содержимое. Например, добавим к мастер-странице секцию footer:

@ViewBag.Title

@RenderBody() @RenderSection("Footer")

Теперь при запуске предыдущего представления Index мы получим ошибку, так как секция Footer не определена. По умолчанию представление должно передавать содержание для каждой секции мастер-страницы. Поэтому добавим вниз представления Index секцию footer. Это мы можем сделать с помощью выражения @section:

@{ Layout = "~/Views/Shared/_Layout.cshtml"; } @section Footer { Все права защищены. Syte Corp. 2012. }

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

Первый вариант заключается в использовании перегруженной версии метода RenderSection , которая позволяет указать, что данную секцию не обязательно определять в представлении. Чтобы отметить секцию Footer в качестве необязательной, надо передать в метод в качестве второго параметра значение false:

@RenderSection("Footer", false)

Второй вариант позволяет задать содержание секции по умолчанию, если данная секция не определена в представлении:

@if (IsSectionDefined("Footer")) { @RenderSection("Footer") } else { Содержание элемента footer по умолчанию. }

ViewStart

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

Для более гибкой настройки представлений предназначена страница _ViewStart.cshtml . Код этой страницы выполняется до кода любого из представлений, расположенных в том же каталоге. Данный файл последовательно применяется к каждому представлению, находящемуся в одном каталоге.

При создании проекта ASP.NET MVC 5 в каталог Views уже по умолчанию добавляется файл _ViewStart.cshtml . Этот файл определяет мастер-страницу, используемую по умолчанию:

@{ Layout = "~/Views/Shared/_Layout.cshtml"; }

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

ASP.NET – один из компонентов.NET Framework. Перечислим кратко основные черты этой технологии.

* Общеязыковая исполнительная среда CLR
* Библиотека классов.NET Framework
* Языки.NET(C#, VB.NET, J# и другие)
* ADO.NET
* ASP.NET
* Web-службы
* Промежуточный язык MSIL (Microsoft Intermediate Language). Это ассемблер для среды выполнения CLR.

ADO.NET – набор классов, предназначенных для доступа к базам данных Microsoft SQL Server, к источникам данных OLEDB и к файлам XML.

Разные части вашего проекта могут быть написаны на разных языках, это называется interoperability. Мы попробуем написать проект, где одна из страниц будет на Visual Basic, а другая на С#.

Компютерные языки бывают компилируемыми и интерпретируемыми. В процессе компиляции программы, написанной на компилируемом языке, создается выполняемый файл(В Windows – exe). Он выполняется быстро, но не может исполняться на другой платформе. Машина, на которой она выполняется, должна иметь похожую конфигурацию. Например, если программа использует dll, то эта библиотека должна быть установлена и на целевой машине. Интерпретируемые программы компилируются в момент выполнения, поэтому они работают медленнее, но не зависят от конкретной машины. В.NET Framework применяется двухэтапная компиляция, то есть первый этап – это компиляция в MSIL, а вторая – компиляция «Just-in-time» компилятором во время исполнения. JIT-компилятор оптимизирует код для той машины, на которой он исполняется. В ASP.NET страница компилируется в MSIL при первом обращении клиента к странице. Вместе с ней компилируются классы, которые она использует. Если вы используете Visual Studio 2005, можно не ожидать первого запроса, а принудительно скомпилировать все страницы вашего проекта. Это позволит выявить синтаксические и другие ошибки.

MSIL – это ассемблер, не зависящий от машины. Он может выполняться на любой машине, где установлена CLR. Проект Mono пытается перенести CLR на другие платформы, позволяя взаимодействовать серверам, работающим на разных платформах.

Вы можете ознакомиться с проектом на сайте http://mono-project.com

На странице http://go-mono.com/archive/xsp-0.10.html находится XSP - сервер ASP.NET, который может служить расширением сервера Apache – основного сервера *nix – систем.

Как работает ASP.NETКогда мы исталлируем.NET, в соответсвующих директориях C:WINDOWSMicrosoft.NETFramework помещается также файл aspnet_isapi.dll. Это – ISAPI-расширение, и предназначено оно для получения запросов, адресованных ASP.NET-приложениям (*.aspx *.asmx и т.д.), а также создания рабочих процессов aspnet_wp.exe, обратывающих запросы. Интернет-сервер – IIS или встроенный в WebMatrix или встроенный в Visual Studio Cassini – используют это расширение, когда им надо обработать обращение к страницам с расширением aspx.

Этот модуль разбирает(parse) содержимое страниц aspx вместе с файлом отделенного кода и генерирует класс на языке страницы с объектом Page. Страница aspx отличается от обычной HTML-страницы наличием серверных элементов управления, которые описываются специальными тегами. Для понимания работы ASP.NET важно отметить, что каждому тегу элемента управления соответствует свой член класса страницы. Например,

< asp : Label ID = "Label1" runat = "server" >


преобразуется в

@ __ctrl = new global:: System . Web . UI . WebControls . Label ();


Основная задача объекта Page – посылка HTML-код в выходной поток. Этот класс компилируется в библиотеку.dll, которая загружается в процесс веб-сервера. Последующие запросы к странице также обрабатывает dll, если исходный код страницы не меняется. Все эти файлы можно найти в директории «Temporary ASP.NET Files» текущей версии.NET. Если мы работаем в среде разработки Visual Studio 2005 или VWD, для каждого проекта создается своя поддиректория.Типы страниц и папок проектаВ проект можно добавлять новые файлы через диалог New File. Если снять отметку с флажка “Place code in separate file”, Visual Studio создаст один файл, в котором будет и страница, и код для ее обработки(в стиле WebMatrix).

Все файлы помещаются в директорию проекта. И наоборот, все файлы, которые будут помещены в директорию проекта, станут его частью. Для веб-сайтов не существует специального файла.csproj, в котором перечислялись бы его составные части, как это было в предыдущих версиях Visual Studio. Структура решения(solution) описывается в текстовом файле.sln. В решение могут входить несколько веб-сайтов и библиотек.

В ASP.NET 2.0 имеются специальные поддиректории проекта для разных типов файлов. Например, в папке App_Code хранятся общедоступные классы, текстовые файлы и некоторые другие(DataSet, диаграмма классов). Файлы с расширениями.cs или.vb, попавшие туда, автоматически компилируются, когда запрашивается любая страница проекта. В App_Data содержатся источники данных, используемых в проекте – базы данных Access и Microsoft SQL, XML-файлы. К этой директории нельзя получить доступ извне, а только из самого приложения. В папке Themes хранятся темы проекта(лекция 13). Применение тем позволяет настроить единообразный внешний вид сайта и централизованно им управлять. В App_GlobalResources находятся ресурсы, например таблицы строк, которые можно создавать на разных языках. Язык ресурсов выбирается автоматически в зависимости от настроек браузера пользователя. В папке App_WebReferences находятся ссылки на используемые веб-сервисы.

Можно создавать собственные поддиректории проекта, например, для хранения картинок.

Проект на 2 языкахПроект Web-сайта состоит из страниц aspx и классов, которые используются на страницах(и, конечно, разнообразных ресурсов). Файлы с классами, к которым можно обратиться из разных страниц, помещают в специальную папку App_Code. При компиляции они помещаются в одну сборку – библиотеку.dll в формате portable executable. Совершенно неважно, на каком языке написан класс, если это язык.NET.

Готовые скомпилированные сборки сторонних производителей тоже можно использовать в проекте. Их помещают в папку Bin. При этом их необходимо импортировать в проект.


Создайте новый проект. Добавьте в него файл, выбрав тип файла Class и язык Visual Basic. Среда сама предложит поместить его в папку Code. Назовем его CustomClass. У него будет очень простой код. Всего одна функция, которая добавляет слово Hello к имени, переданному в качестве параметра.

Imports Microsoft . VisualBasic
Public Class CustomClass
Public Function GetMessage (ByVal name As String ) As String
Return "Hello, " & name
End Function
End Class


Добавьте в проект страницу CodeFolder_cs.aspx. Это страница написана на C#, но она создает класс, написанный на VB.NET.


< script runat = "server" >
void Button1_Click (object sender , EventArgs e )
{
CustomClass c = new CustomClass ();
Label1 . Text = c . GetMessage (TextBox1 . Text );
}



ASP.NET Inline Pages



Welcome to ASP.NET 2.0!
Enter Your Name:










На странице определена форма, напоминающая форму Windows-приложения. На ней имеется кнопка, нажатие на которую обрабатывается в функции Button1_Click. В ней создается класс и вызывается его функция GetMessage с параметром, который берется из элемента редактирования. Возвращаемое значение записывается в элемент Label1. В более простом варианте это выглядит так:

Label1 . Text = “Hello ” + TextBox1 . Text ;


Класс может быть написан на C#, а использоваться из страницы на Visual Basic.

using System ;
public class CustomClass2
{
public String GetMessage (String input ) {
return "Hello from C# " + input ;
}
}
Код страницы CodeFolder_vb . aspx :
< script runat = "server" >
Sub Button1_Click (ByVal sender As Object , ByVal e As System . EventArgs )
Dim c As New CustomClass2
Label1 . Text = c . GetMessage (TextBox1 . Text )
End Sub


Однако поместить в директории App_Code можно только на одном языке. Если там будет находиться файлы на разных языках, проект не будет компилироваться. Для того, чтобы использовать два языка, необходимо создать поддиректорию, добавить ее в файле web.config и поместить в нее файлы на другом языке.

Регистрация в файле web.config:

< configuration >
< system . web >
...
< compilation >
< codeSubDirectories >
< add directoryName = "VBCode" />

< codeSubDirectories >
< add directoryName = "CSCode" />


...

ДирективыНа каждой странице aspx обычно задаются директивы, с помощью которых Вы можете контролировать поведение страницы. Можно считать их языком, с которым вы общаетесь с компилятором, указывая ему, как обрабатывать данную страницу. Директивы обычно помещают в начале файла. Мы уже встречались с директивой Page в первой лекции.

Синтаскис объявления директив такой:


Можно объявить несколько директив одновременно:


В ASP.NET 2.0 существует 11 директив.
Директива Атрибуты Описание
@Assembly Name
Src Импортирует на страницу или в элемент управления сборку с заданным именем
@Control такие же, как у Page Применяется для задания свойств при создании собственных пользовательских элементов управления.
@Implements Interface Указывает, что класс данной страницы реализует данный интерфейс
@Import Namespace Импортирует пространство имен
@Master такие же, как у Page Применяется на страницах шаблона дизайна(Master page). Новая в ASP.NET 2.0
@MasterType TypeName
VirtualPath Дает строго типизированную ссылку на класс, содержащийся в шаблоне дизайна. Позволяет обращаться к свойствам этого класса.
@OutputCache Duration
Location
VaryByCustom
VaryByHeader
VaryByParam
VaryByControl Управляет кэшированием страницы или элемента управления. Подробнее описана в лекции 15.
@Page см. Ниже Атрибуты, относящиеся к данной странице. Употребляется только в файлах с расширением aspx
@PreviousPageType TypeName
VirtualPath Страница, с которой были отправлены данные, введенные пользователем. Новая в ASP.NET 2.0. Раньше страницы отправляли пост только самим себе.
@Reference Page
Control Страница или элемент управления, который нужно компилировать вместе с данной
@Register Assembly
Namespace
Src
TagName
TagPrefix Создает псевдонимы для пространств имен и пользовательских элементов управления

Пока что подробно рассмотрим 2 из них – Page и Import.

Директива PageДиректива Page позволяет установить свойства страницы, которые будут использованы во время компиляции. Эта директива используется чаще остальных, поэтому ее необходимо рассмотреть более подробно.

Наиболее важные атрибуты директивы перечислены в таблице:

AutoEventWireup Автоматическая обработка событий страницы
Buffer Управляет буферизацией страницы. По умолчанию буферизуется
ClassName Позволяет назначать имя класса, сгенерированного данной страницей
CodeFile Название файла с отделенным кодом для данной страницы
Culture Устанавливает набор региональных параметров, т.е. язык, формат валюты, даты, чисел
Debug Если true, на страницу выводится отладочная информация
Trace Вывод трассировочной информации
EnableViewState Сохранение состояния страницы. По умолчанию она сохраняется
EnableTheming Позволяет включить или выключить поддержку тем оформления. По умолчанию включено
Inherits Класс, от которого наследуется класс данной страницы в технологии отделенного кода
IsAsync Показывает, обрабатывается ли страница асинхронно.
Language Язык, используемый во внедренном коде
WarningLevel Наибольший допустимый уровень предупреждений компилятора
CompilerOptions Опции компилятора
Пространства имен библиотеки классовБиблиотека классов FCL содержит тысячи классов. Для удобства использования они объединены в пространства имен. Чтобы обращаться к классам, объявленным в пространстве имен, без указания полного пути, его нужно импортировать в проект. Если вы хотите работать с файлами формата XML, вам нужно импортировать пространство имен System.XML. В страницах отделенного кода на C#, как всегда, используется директива using.

using System . XML ;


На странице aspx – директива Import


Для каждого пространства имен требуется отдельная директива Import.

Visual Studio.NET и VWD по умолчанию включают в страницу на C# наиболее часто используемые пространства имен. На страницу aspx импортировать эти пространства имен не требуется.

using System ;
using System . Data ;
using System . Configuration ;
using System . Collections ;
using System . Web ;
using System . Web . Security ;
using System . Web . UI ;
using System . Web . UI . WebControls ;
using System . Web . UI . WebControls . WebParts ;
using System . Web . UI . HtmlControls ;


Например, в пространстве имен System.Web.UI находится класс Page, без которого не может существовать ни одна страница ASP.NET, в System.Web - HttpRequest и HttpResponse.Программа просмотра классовКак же узнать, какие классы имеются в библиотеке классов.NET? Для этого предназначен Object Browser (Visual Studio 2005) и Class Browser WebMatrix. Чтобы открыть Object Browser в Visual Studio 2005 или VWD Express, выберите пункт меню View-> Object Browser. Если вы используете WebMatrix, то Class Browser находится в той же папке меню Windows, что и WebMatrix – All Programs->ASP.NET WebMatrix. В формате ASP.NET Class Browser включен в состав Framework SDK.

Все имеющиеся пространства имен показаны как узлы древовидной структуры. Нас интересует System.Web. Раскройте этот узел. Внутри оказались другие пространства имен. Раскройте System.Web.UI. Там находится большое количество классов, интерфейсов, делегатов, перечислений. Их можно узнать по иконкам. Например, иконка делегата похожа на чемодан.

Интерфейс

Событие

Перечисление

Выберите класс Page. В окошке справа появится список его методов, полей и событий. Если выбрать метод, в третьем окне под вторым появится его описание. Внутри класса находятся еще две папки – классов-прародителей(Base Classes) и классов-потомков. Все их тоже можно просмотреть. Object Browser показывает и классы текущего проекта. Если классы закомментирован тегами генерации документации XML, то эта информация тоже видна, например Summary, Parameters, Values, Returns.

Исследуя свойство IsPostBack, можно узнать, что оно имеет булевское значение, и предназначено только для чтения.

Проверка соответствия стандартамСуществуют разные стандарты HTML и XHTML. Более поздние стандарты предъявляют более строгие требования, например, XHTML 1.1 не разрешает пользоваться
и другими простыми тегами без закрывающего слэша
. В то же время старые стандарты не поддерживают новые теги.

В заголовке HTTP-запроса указывается стандарт документа, Visual Studio 2005 во всех страницах указывает следующий стандарт:


Этот стандарт требует наличия атрибута xmlns в теге - ссылки на сайт с описанием стандарта.

< html xmlns = >


Многие страницы, сделанные для предыдущих версий ASP.NET, не имеют такого атрибута. В панели инстументов Html Source Editing также находится выпадающий список, в котором можно выбрать стандарт или версию браузер, для которого предназначена данная страница. Страница автоматически проверяется на соответствие этому стандарту.
Свойства страницы

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

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

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

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


< html xmlns = "http://www.w3.org/1999/xhtml" >
< head runat = "server" >
< title > Тип страницы

< body >
< div >


< div >




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


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

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


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

Тип данной страницы ASP.pagetype_aspx
Базовый тип данной страницы PageType

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

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


К текущему объекту страницы можно обращаться как к переменной Page. Page – это контейнер элементов управления данной страницы, поэтому содержит в себе коллекцию Controls. Если в теге присутствует атрибут 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 . Add (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" );
}



Hello ASP.NET


Учитесь программировать на ASP.NET




В этом примере мы поменяли текст заголовка. Запустите эту страницу. В получившемся HTML-коде внутри тега стоит уже не «Untitled Page», а «Новый заголовок», который был установлен через Page.Header.Title. Был создан стиль для тега

Что отразилось таким образом:

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


Внешняя страница 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" >

< title > Русская кодировка


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

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


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

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

NameLabel . Text = Server . HtmlEncode (Request . QueryString [ "Name" ]);

События страницыРабота среды ASP.NET со страницей начинается с получения и обработки Web-сервером IIS запроса к данной странице и передачи этого запроса среде выполнения ASP.NET. Среда выполнения анализирует, нужно ли компилировать страницу или можно выдать в качестве ответа страницу из кэша.

Затем начинается жизненный цикл страницы. Он начинается с этапа PreInit. После получения запроса среда выполнения загружает класс вызываемой страницы, устанавливает свойства класса страницы, выстраивает дерево элементов, заполняет свойства Request и Response и свойства UICulture и вызывает метод IHttpHandler.ProcessRequest. После этого среда выполнения проверяет, каким образом была вызвана эта страница, и если страница вызвана путем передачи данных с другой страницы, о чем будет рассказано далее, то среда выполнения устанавливает свойство PreviousPage.

На этом этапе устанавливается также свойство IsPostback объекта Page, которое позволяет узнать, в первый ли раз загружается форма или она должна формироваться как результат обработки данных, введенных пользователем.

В обработчиках событий страницы можно проверить это свойство:

if (! Page . IsPostBack )
{
// обрабатывать
}


Дальше происходит инициализация страницы – событие Init. Во времени инициализации страницы создаются дочерние пользовательские элементы управления и им установливаются свойства id. В это же время к странице применяются темы оформления. Если страница вызвана в результате постбэка, то на этом этапе данные, отправленные на сервер, еще не загружены в свойства элементов управления. Программист может инициализировать их свойства.

Если на странице существуют валидаторы(классы проверки данных, см. лекцию 5), то для них вызывается метод Validate(). Затем вызываются обработчики событий (при условии, что страница генерируется в ответ на действия пользователя).

В методе Render генерируется сам HTML-код выводимой страницы. При этом страница вызывает соответствующие методы дочерних элементов, те – методы своих дочерних элементов. В методе Render код выводится в Response.OutputStream. Сама страница тоже считается элементом управления – класс Page является наследником класса Control. Если на странице есть блоки отображения, они становятся частью функции отрисовки (rendering).

Наконец, страница выгружается из памяти сервера и происходит событие Unload.

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


Во время трассировки не выводится событие Unload, потому что оно происходит, когда весь код уже выведен. Во время обработки этого события нужно освободить ресурсы, например соединения с базами данных или открытые файлы.

Полный список событий страницы, которые можно переопределить в классе страницы:

* PreInit
* Init
* InitComplete
* PreLoad
* Load
* LoadComplete
* PreRender
* PreRenderComplete
* Unload

Для всех событий определены обработчики – виртуальные функции OnInit, OnLoad. Когда AutoEventWireup равно true, в классе автоматически объявляются функции-обработчики событий с префиксом Page - Page_Load, Page_Init и так далее. Одно из самых популярных событий – это Page_Load. Создавая новую страницу, Visual Studio создает обработчик этого события. Здесь можно изменить внешний вид элементов и создать новые. Можно установить AutoEventWireup в false. В таком случае надо писать перегруженные версии виртуальных функций.

protected override void OnInit (EventArgs e )
{
}


Так можно добиться ускорения работы страницы.
Способы внедрения кода ASP.NET в страницу.

Есть три способа внедрить код на программном языке в страницу aspx.

Блок называется блоком объявления кода.

Тег похож на тот, которым вводятся скрипты JavaScript. Но с большим отличием – скрипт выполняется на сервере. Поэтому необходимо задавать атрибут runat="server". Атрибут language у него может принимать значения С#, VB, J#. В страницах с отделенным кодом можно писать и на C++. По умолчанию принимается значение языка Visual Basic, поэтому не надо забывать указывать язык, когда пишете на С#. Но нет необходимости это делать, если язык определен в директиве Page. Можно писать на разных языках в одном приложении, но нельзя смешивать разные языки на одной странице.

Внутри блока можно объявлять переменные, константы и функции. На самом деле в C# нет глобальных переменных, так что это будут члены класса страницы. Но они выглядят глобальными, потому что класс не описан программистом, его генерирует ASP.NET. Поэтому будем называть их переменными страницы.

Здесь можно переопределить виртуальные методы класса страницы. В блоке также можно объявлять классы, но они будут внутренними по отношению к классу страницы.

Блоки отображенияЛюбой код, внедренный с помощью , обрабатывается во время события Render как часть страницы.

В теле блока допустимо объявлять переменные, тогда они будут локальными для того метода, в котором данный блок будет реализован, но нельзя объявлять методы или типы.

Такой стиль программирования был характерен для asp. Чаще всего в блоках отображения выводится HTML-код с помощью Response.Write.

является сокращением .

< html >
< head >

< body >
1 Строка HTML < br />

2 Строка HTML < br />

3 Строка HTML < br />



Более современный способ – использование серверных элементов управления. Они описаны в теле страницы подобно обычным элементам разметки, являются членами класса страницы. К ним возможно обращение через идентификатор. Например, вместо того, чтобы выводить текст через Response.Write, можно установить текст элемента управления, как в примере из первой лекции.

Объект любого класса создается с помощью синтаксиса «тег объекта»

< object id = "items" class= "System.Collections.ArrayList" runat = "server" />


Это эквивалентно описанию в классе страницы поля

System . Collections . ArrayList items ;


Еще один способ применяется для связывания с источниками данных и будет рассмотрен в 7 лекции.ЗаключениеТехнология ASP.NET построена на объектно-ориентированном событийно-управляемом подходе к созданию web-страницы. Классы, используемые для генерации web-страниц, являются частью библиотеки.NET Frameworks. Для многих из них существуют аналоги в Windows Forms, что сближает программирование настольных приложений с программированием web-приложений.