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


Практическое руководство. Преобразование веб-страницы ASP.NET 1.1, использующей атрибут CodeBehind, в страницу ASP.NET 2.0

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

В этом разделе показано, как создать веб-страницу и пользовательский элемент управления, использующие атрибут CodeBehind директивы @ Page, скомпилировать их и преобразовать для использования атрибута CodeFile с разделяемым классом в файлах с выделенным кодом платформы .NET Framework версии 2.0.

Новая модель с выделенным кодом в ASP.NET версии 2.0 основана на разделяемых классах. Разметка страницы хранится в одном ASPX-файле, а код определен в разделяемом классе, в файле с выделенным кодом. Преобразование существующих веб-страниц в новую модель с выделенным кодом позволяет использовать улучшенное разделение разметки и кода, так как нет необходимости включать переменные экземпляров или явную привязку событий в разделяемый класс.

Веб-страницы, использующие атрибуты CodeBehind и Inherits директивы @ Page, продолжают работать и на платформе .NET Framework 2.0. Однако необходимо скомпилировать файлы с выделенным кодом и разместить сборку в каталоге Bin.

Если необходимо выполнить преобразование в модель с выделенным кодом ASP.NET 2.0, следует внести определенные изменения в ASPX-файл и файл с выделенным кодом. В ASPX-файле следует заменить атрибут CodeBehind на атрибут CodeFile. В файлах с выделенным кодом необходимо использовать разделяемый класс. Преимущество использования новой модели с выделенным кодом состоит в том, что нет необходимости явно компилировать файлы с выделенным кодом, так как компилятор ASP.NET делает это автоматически.

Кроме этого, при использовании новой модели с выделенным кодом ссылки на другие файлы кода добавляются с помощью директив @ Register.

Для доступа к веб-странице, создаваемой в указанных далее процедурах, потребуется создать виртуальный каталог в службах Microsoft Internet Information Services (IIS). Дополнительные сведения о создании виртуального каталога для IIS см. в разделе Практическое руководство. Создание и настройка виртуальных каталогов в IIS 5.0 и 6.0.

Компиляция веб-страницы и пользовательского элемента управления, использующих атрибут CodeBehind

  1. Создайте веб-страницу с помощью атрибута CodeBehind директивы @ Page, как показано в следующем примере кода.

    <%@ Page Language="VB" AutoEventWireup="true" 
        CodeBehind="CodeBehindExample.aspx.vb" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Using the CodeBehind Attribute</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <asp:Label id="Label1" runat="server"></asp:Label>    
        </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" AutoEventWireup="true" 
        CodeBehind="CodeBehindExample.aspx.cs" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Example</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <asp:Label id="Label1" runat="server"></asp:Label>    
        </div>
        </form>
    </body>
    </html>
    
    Public Class CodeBehindExample
        Inherits System.Web.UI.Page
    
        Protected Label1 As System.Web.UI.WebControls.Label
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
            Dim uc As CodeBehindExampleUserControl = _
            CType(LoadControl("~/CodeBehindExampleUserControl.ascx"), _
            CodeBehindExampleUserControl)
            Label1.Text = CType(uc.FindControl("Label2"), _
            System.Web.UI.WebControls.Label).Text
    
        End Sub
    
    End Class
    
    public class CodeBehindExample : 
        System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label Label1;
    
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            CodeBehindExampleUserControl uc =
              (CodeBehindExampleUserControl)LoadControl
              ("~/CodeBehindExampleUserControl.ascx");
            Label1.Text = ((System.Web.UI.WebControls.Label)
                uc.FindControl("Label2")).Text;
    
        }
    }
    

    Обратите внимание, что для элемента управления Label, объявленного на ASPX-странице, существует соответствующее объявление в файле с выделенным кодом. Также класс с выделенным кодом является обычным определением класса, а не разделяемым классом.

  2. Создайте пользовательский элемент управления с помощью атрибута CodeBehind директивы @ Control, как показано в следующем примере кода.

    <%@ Control Language="VB" AutoEventWireup="false" 
        CodeBehind="CodeBehindExampleUserControl.ascx.vb" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" runat="server">
    Label text in user control.
    </asp:Label>
    
    <%@ Control Language="C#" AutoEventWireup="false" 
        CodeBehind="CodeBehindExampleUserControl.ascx.cs" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" runat="server">
    Label text in user control.
    </asp:Label>
    
    Public Class CodeBehindExampleUserControl
        Inherits System.Web.UI.UserControl
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
            ' User control code.
        End Sub
    
    End Class
    
    public class CodeBehindExampleUserControl : 
        System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            // User control code.
        }
    }
    

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

  3. Выполните компиляцию веб-страницы и пользовательского элемента управления и разместите библиотеку кода в папке Bin приложения. Для использования атрибута CodeBehind следует скомпилировать все классы с выделенным кодом в одну библиотеку кода и разместить полученный DLL-файл в папке Bin. Для примера веб-страницы и пользовательского элемента управления команда компиляции для обоих файлов с выделенным кодом выглядит следующим образом:

    vbc /target:library /nologo /out:bin\CodeBehindExample.dll /r:System.dll,System.Web.dll CodeBehindExample.aspx.vb CodeBehindExampleUserControl.ascx.vb
    
    csc /target:library /nologo /out:bin\CodeBehindExample.dll CodeBehindExample.aspx.cs CodeBehindExampleUserControl.ascx.cs
    
  4. Выполните запрос веб-страницы CodeBehindExample.aspx в веб-обозревателе, чтобы проверить ее работу в платформе .NET Framework 2.0.

Для преобразования веб-страницы и пользовательского элемента управления, использующих атрибут CodeBehind в модель с выделенным кодом ASP.NET 2.0, выполните следующие действия.

  1. Внесите изменения в ASPX-файл веб-страницы, как показано в следующем примере кода.

    <%@ Reference Control="~/CodeBehindExampleUserControl.ascx" %>
    <%@ Page Language="VB" AutoEventWireup="false" 
        CodeFile="CodeBehindExample.aspx.vb" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Example</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <asp:Label id="Label1" runat="server"></asp:Label>        
        </div>
        </form>
    </body>
    </html>
    
    <%@ Reference Control="~/CodeBehindExampleUserControl.ascx" %>
    <%@ Page Language="C#" AutoEventWireup="true"  
        CodeFile="CodeBehindExample.aspx.cs" 
        Inherits="CodeBehindExample" %>
    
    <!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>Code-Behind Example</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
          <asp:Label id="Label1" runat="server"></asp:Label>
        </div>
        </form>
    </body>
    </html>
    

    Атрибут CodeFile используется вместо атрибута CodeBehind в директиве @ Page ASPX-файла. Директива @ Reference используется для ссылки на пользовательский элемент управления на странице с выделенным кодом.

  2. Внесите изменения в файлы с выделенным кодом веб-страниц, как показано в следующем примере кода.

    Partial Class CodeBehindExample
        Inherits System.Web.UI.Page
    
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
    
            Dim uc As CodeBehindExampleUserControl = _
            CType(LoadControl("~/CodeBehindExampleUserControl.ascx"), _
            CodeBehindExampleUserControl)
            Label1.Text = CType(uc.FindControl("Label2"), _
            System.Web.UI.WebControls.Label).Text
    
        End Sub
    End Class
    
    public partial class CodeBehindExample : 
        System.Web.UI.Page 
    {
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            CodeBehindExampleUserControl uc =
                (CodeBehindExampleUserControl)LoadControl
                ("~/CodeBehindExampleUserControl.ascx");
            Label1.Text = ((System.Web.UI.WebControls.Label)
                uc.FindControl("Label2")).Text;
    
        }
    }
    

    В файле с выделенным кодом разделяемый класс используется для определения дополнительного кода для ASPX-страницы. Теперь нет необходимости объявлять элемент управления Label, используемый на ASPX-странице, как в предыдущем случае страницы с выделенным кодом на основе атрибута CodeBehind.

  3. Внесите изменения в ASPX-файл пользовательского элемента управления, как показано в следующем примере кода.

    <%@ Control Language="VB" AutoEventWireup="false" 
        CodeFile="CodeBehindExampleUserControl.ascx.vb" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" runat="server">
    Label text in user control.
    </asp:Label>
    
    <%@ Control Language="C#" AutoEventWireup="true" 
        CodeFile="CodeBehindExampleUserControl.ascx.cs" 
        Inherits="CodeBehindExampleUserControl" %>
    <asp:Label id="Label2" runat="server">
    Label text in user control.
    </asp:Label>
    

    Как и веб-страница, пользовательский элемент управления использует атрибут CodeFile вместо атрибута CodeBehind.

  4. Внесите изменения в файл с выделенным кодом пользовательского элемента управления, как показано в следующем примере кода.

    Partial Class CodeBehindExampleUserControl
        Inherits System.Web.UI.UserControl
    
        Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
            ' User control code.
        End Sub
    End Class
    
    public partial class CodeBehindExampleUserControl : 
        System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, 
            System.EventArgs e)
        {
            // User control code.
        }
    }
    

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

  5. Удалите из папки Bin файл CodeBehindExample.dll, созданный в предыдущей процедуре.

    ASP.NET 2.0 выполнит компиляцию страницы и ее файлов с выделенным кодом по первому запросу.

  6. Выполните запрос веб-страницы CodeBehindExample.aspx и убедитесь, что она работает как и раньше.

См. также

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

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

Другие ресурсы

Миграция в ASP.NET