Практическое руководство. Преобразование веб-страницы 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
Создайте веб-страницу с помощью атрибута 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-странице, существует соответствующее объявление в файле с выделенным кодом. Также класс с выделенным кодом является обычным определением класса, а не разделяемым классом.
Создайте пользовательский элемент управления с помощью атрибута 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. } }
Обратите внимание, что, как и файл с выделенным кодом веб-страницы, файл с выделенным кодом для пользовательского элемента управления использует обычный класс, а не разделяемый класс.
Выполните компиляцию веб-страницы и пользовательского элемента управления и разместите библиотеку кода в папке 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
Выполните запрос веб-страницы CodeBehindExample.aspx в веб-обозревателе, чтобы проверить ее работу в платформе .NET Framework 2.0.
Для преобразования веб-страницы и пользовательского элемента управления, использующих атрибут CodeBehind в модель с выделенным кодом ASP.NET 2.0, выполните следующие действия.
Внесите изменения в 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 используется для ссылки на пользовательский элемент управления на странице с выделенным кодом.
Внесите изменения в файлы с выделенным кодом веб-страниц, как показано в следующем примере кода.
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.
Внесите изменения в 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.
Внесите изменения в файл с выделенным кодом пользовательского элемента управления, как показано в следующем примере кода.
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. } }
Как и файл с выделенным кодом веб-страницы, файл с выделенным кодом пользовательского элемента управления использует разделяемый класс.
Удалите из папки Bin файл CodeBehindExample.dll, созданный в предыдущей процедуре.
ASP.NET 2.0 выполнит компиляцию страницы и ее файлов с выделенным кодом по первому запросу.
Выполните запрос веб-страницы CodeBehindExample.aspx и убедитесь, что она работает как и раньше.
См. также
Основные понятия
Общие сведения об одновременном выполнении в ASP.NET