Поделиться через


Модель кода веб-страниц ASP.NET

Обновлен: Ноябрь 2007

Веб-страница ASP.NET состоит из двух частей:

  • визуальные элементы, к которым относится разметка, серверные элементы управления и статический текст;

  • программная логика страницы, к которой относятся обработчики событий и другой код.

В ASP.NET реализовано две модели управления визуальными элементами и кодом: однофайловая модель страницы и модель страницы с выделенным кодом. Обе модели работают одинаково, и в них обеих используются одни и те же элементы управления и код.

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

Однофайловая модель страницы

В однофайловой модели разметка страницы и ее программный код физически расположены в одном и том же ASPX-файле. Программный код находится в блоке script, который содержит атрибут runat="server", указывающий, что этот код должен быть выполнен в ASP.NET.

Ниже приведен пример кода однофайловой страницы, которая содержит элементы управления Button и Label. В коде выделен обработчик событий Click элемента управления Button в блоке script.

<%@ Page Language="VB" %>
<script runat="server">
    Protected Sub Button1_Click(ByVal sender As Object, _            ByVal e As System.EventArgs)        Label1.Text = "Clicked at " & DateTime.Now.ToString()    End Sub
</script>

<html>
<head id="Head1" runat="server">
  <title>Single-File Page Model</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:Label ID="Label1" 
        runat="server" Text="Label">
      </asp:Label>
      <asp:Button ID="Button1" 
         runat="server" OnClick="Button1_Click" Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" %>
<script runat="server">
void Button1_Click(Object sender, EventArgs e){    Label1.Text = "Clicked at " + DateTime.Now.ToString();}
</script>
<html>
<head>
  <title>Single-File Page Model</title>
</head>
<body>
  <form runat="server">
    <div>
       <asp:Label id="Label1" 
         runat="server" Text="Label">
       </asp:Label>
       <br />
       <asp:Button id="Button1" 
         runat="server" 
         onclick="Button1_Click" 
         Text="Button">
      </asp:Button>
    </div>
  </form>
</body>
</html>

Блок scriptможет содержать столько кода, сколько нужно для страницы. В состав кода могут входить обработчики событий элементов управления, которые размещены на странице (как в этом примере), методы, свойства и другой код, который обычно используется в файле класса. Во время выполнения однофайловая страница воспринимается как класс, производный от класса Page. Страница не содержит явных объявлений классов. Вместо этого компилятор создает новый класс, членами которого являются элементы управления. (Не все элементы управления становятся членами класса страницы; некоторые из них являются дочерними по отношению к другим элементам управления.) Код страницы становится частью кода класса; например, создаваемые обработчики событий становятся членами класса, производного от класса Page.

Дополнительные сведения см. в разделе Общие сведения о классе страницы ASP.NET.

Модель страницы с выделенным кодом

Модель страницы с выделенным кодом позволяет поместить разметку в один файл (ASPX), а программный код — в другой. Имя файла с кодом зависит от используемого языка программирования.

015103yb.alert_note(ru-ru,VS.90).gifПримечание.

Не все языки программирования .NET позволяют создавать файлы с выделенным кодом веб-страниц ASP.NET, а лишь те, которые поддерживают разделяемые классы. Например, язык J# не поддерживает разделяемые классы, следовательно, он не поддерживает и создание файлов с выделенным кодом веб-страниц ASP.NET.

Например, разметка страницы с именем SamplePage находится в файле SamplePage.aspx, а код — в файле SamplePage.aspx.vb (если это код на Visual Basic), в файле SamplePage.aspx.cs (если это код на C#) и т. д.

015103yb.alert_note(ru-ru,VS.90).gifПримечание.

Модель с выделенным кодом в платформе .NET Framework версии 2.0 отличается от аналогичной модели в более ранних версиях.

В модели с выделенным кодом пример однофайловой страницы из предыдущего раздела состоял бы из двух частей. Разметка содержалась бы в одном файле (в этом примере — в файле SamplePage.aspx), и была бы похожа на однофайловую страницу, пример которой приведен ниже.

<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb" 
    Inherits="SamplePage" AutoEventWire="false" %>
<html>
<head runat="server" >
   <title>Code-Behind Page Model</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
       <asp:Label id="Label1" 
         runat="server" Text="Label" >
      </asp:Label>
      <br />
      <asp:Button id="Button1" 
         runat="server" 
         onclick="Button1_Click" 
         Text="Button" >
       </asp:Button>
    </div>
  </form>
</body>
</html>
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs" 
    Inherits="SamplePage" AutoEventWireup="true" %>
<html>
<head runat="server" >
   <title>Code-Behind Page Model</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
       <asp:Label id="Label1" 
         runat="server" Text="Label" >
      </asp:Label>
      <br />
      <asp:Button id="Button1" 
         runat="server" 
         onclick="Button1_Click" 
         Text="Button" >
       </asp:Button>
    </div>
  </form>
</body>
</html>

Имеется два различия между страницами ASPX в однофайловой модели и модели с выделенным кодом. В модели с выделенным кодом отсутствует блок script с атрибутом runat="server". (Если на странице нужно разместить клиентский сценарий, она может содержать блоки script без атрибута runat="server".) Второе отличие заключается в том, что директива @ Page в модели с выделенным кодом содержит атрибуты, которые ссылаются на внешний файл (SamplePage.aspx.vb или SamplePage.aspx.cs) и класс. Эти атрибуты связывают страницу ASPX с ее кодом,

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

Partial Class SamplePage
    Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "Clicked at " & DateTime.Now.ToString()
    End Sub
End Class
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class SamplePage : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "Clicked at " + DateTime.Now.ToString();
    }
}

Файл с выделенным кодом содержит объявления полных классов в пространстве имен по умолчанию. Однако этот класс объявляется с помощью ключевого слова partial. Это указывает на то, что класс не содержится полностью в одном файле. При обработке страницы компилятор читает страницу ASPX и файл, на который она ссылается в директиве @ Page, компонует из них один класс, а затем компилирует их в виде модуля в одном классе.

Файл разделяемого модуля является наследником класса Page страницы. Дополнительные сведения см. в разделе Общие сведения о классе страницы ASP.NET.

Выбор модели страницы

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

015103yb.alert_note(ru-ru,VS.90).gifПримечание.

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

Преимущества однофайловых страниц

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

Приведем ряд преимуществ одностраничной модели.

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

  • Страницы, созданные по однофайловой модели, несколько легче развертывать и пересылать другим программистам, поскольку это всего лишь один файл.

  • Поскольку в однофайловых страницах отсутствует зависимость между файлами, их легче переименовывать.

  • Несколько облегчается управление файлами в системе управления версиями, поскольку вся страница содержится в одном файле.

Преимущества страниц с выделенным кодом

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

Перечислим преимущества модели с выделенным кодом.

  • В страницах с выделенным кодом разметка (интерфейс пользователя) и код четко разделены. Удобно, чтобы над разметкой работал дизайнер, а над кодом — программист.

  • Тогда код не мешает дизайнеру или кому-то другому, кто занимается только разметкой страницы.

  • Код можно использовать для нескольких страниц.

Компиляция и развертывание

Процессы компиляции и развертывания однофайловых страниц и страниц с выделенным кодом похожи. В простейшем случае страница компилируется на целевой сервер. Для страниц с выделенным кодом копируется и страница ASPX, и файл с кодом. При первом запросе страницы она компилируется в ASP.NET и открывается. Обратите внимание, что в обоих сценариях исходный код развертывается вместе с разметкой.

Можно также заранее компилировать веб-страницу. В этом случае в среде ASP.NET создается объектный код страниц, который можно скопировать на целевой сервер. Предварительная компиляция работает как для однофайловых страниц, так и для страниц с выделенным кодом, и выходные данные компилятора одинаковы для обеих моделей. Дополнительные сведения см. в разделе Общие сведения о предварительной компиляции в ASP.NET.

См. также

Основные понятия

Общие сведения о жизненном цикле веб-страниц ASP.NET

Общие сведения о компиляции в ASP.NET