本文介绍如何开发在 Microsoft ASP.NET 应用程序中使用代码隐藏类文件的.aspx页。 本文中的代码示例包括预编译的代码隐藏类文件和按需编译的代码隐藏类文件的要求。
原始产品版本: ASP.NET
原始 KB 数: 308143
要求
以下列表概述了所需的推荐硬件、软件和网络基础结构:
- Windows
- .NET Framework
- Internet Information Services (IIS)
使用 Visual C# .NET 创建 ASP.NET Web 应用程序
本部分演示如何创建名为 CodeBehindSamples 的新 ASP.NET Web 应用程序。
- 启动 Visual Studio .NET。
- 在 “文件” 菜单上,指向 “新建” ,然后单击 “项目” 。
- 在“项目类型”下,单击“Visual C# 项目”。 在“模板”下,单击 ASP.NET Web 应用程序。
- 在 “名称 ”框中,键入 CodeBehindSamples。 在 “位置” 框中,键入 ServerName。 如果使用本地服务器,请将 位置 保留为
http://localhost
。
使用代码隐藏类文件
如果将代码隐藏类文件用于.aspx页,则可以将演示代码与核心应用程序逻辑(或代码隐藏)分开。 编译代码隐藏类文件,以便可以创建并用作对象。 这允许访问其属性、其方法和事件处理程序。 为此,.aspx页必须指定继承自代码隐藏基类。 为此,请使用 Inherits
指令的属性 @ Page
。 .aspx页继承自代码隐藏类,代码隐藏类继承自 Page
该类。
默认情况下,如果使用 Visual Studio .NET,则会向@ Page
指令添加一个Codebehind
属性。 .NET Framework 实际上不使用此属性。 相反,Visual Studio .NET 使用此属性来维护对.aspx页的关联代码隐藏文件的引用。
若要演示 Visual Studio .NET 如何使用该 Codebehind
属性,请删除该 Codebehind
属性。 无法再右键单击.aspx页,然后单击“ 查看代码”。 发生此行为的原因是 Visual Studio .NET 不再包含可用于页面的类文件的引用。 请记住,这不是 .NET Framework 使用代码隐藏类文件的方式,而是 Visual Studio .NET 如何管理这些项目文件。
将 Inherits 属性与预编译类配合使用
如果将代码隐藏类预编译到程序集中,则可以使用该 Inherits
属性指定要从中继承的类。 在此方案中,部署应用程序时,无需包含实际的代码隐藏类文件。 相反,必须部署程序集和.aspx页。 部署应用程序时,必须将程序集 Bin
放在应用程序的文件夹中。
本部分演示如何创建一个新的 Web 窗体,该表单使用预编译方法并从代码隐藏类继承。
若要将名为 InheritSample.aspx 的新 Web 窗体添加到 Visual Studio .NET 项目,请执行以下步骤:
- 在解决方案资源管理器中,右键单击项目节点,单击“添加”,然后单击“添加 Web 窗体”。
- 在 “名称 ”框中,键入 InheritSample.aspx,然后单击“ 打开”。
切换到 “设计 ”视图,然后将 Web 窗体 标签 控件添加到.aspx页。
右键单击.aspx页,然后单击“ 查看代码”。 代码隐藏文件将在编辑器中打开。
在代码隐藏文件中,将以下代码添加到
Page_Load
事件处理程序:private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Precompiled): Page_Load fired!"; }
注意
此代码仅演示后续步骤中的运行时示例中涉及代码隐藏类。
从代码隐藏类文件切换到编辑器中的.aspx页,然后切换到 HTML 视图。
在页面顶部,查看指令的代码
@ Page
。 代码应类似于以下默认代码:<%@ Page language="c#" Codebehind="InheritSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.InheritSample" %>
在此示例中,.aspx页继承自命名空间中
CodeBehindSamples
命名InheritSamples
的代码隐藏类。 默认情况下,在 Visual Studio .NET 中创建的 Web 应用程序使用ProjectName.ClassName
属性值的结构Inherits
。在“文件”菜单上,单击“全部保存”以保存 Web 窗体和其他关联的项目文件。
在 Visual Studio .NET IDE 的“生成”菜单上,单击“生成”以生成项目。
在“项目”菜单上,单击“显示所有文件” 。
在解决方案资源管理器中,单击以展开
Bin
文件夹。 编译上一节 (本示例中CodeBehindSamples.dll )的项目时生成的程序集将显示在Bin
文件夹中。在 Visual Studio .NET 中,右键单击解决方案资源管理器中的页面,然后单击“在浏览器中查看”以运行代码。 标签填充了以下值:
(Precompiled): Page_Load fired!
使用 Src 属性并按需编译
如果代码隐藏类文件按需编译,而不是预编译,则必须使用该 Src
属性来指定代码隐藏类文件的相对路径。 使用此方法部署应用程序时,请确保包含实际类文件。
注意
有关使用 Src
特性在 Visual Studio .NET 中开发应用程序时的潜在问题的详细信息,请参阅 本文中的“参考” 部分。 Visual Studio .NET 旨在利用将应用程序代码预编译到程序集中,而不是使用本节中所述的按需编译方法。
若要将名为 SrcSample.aspx 的新 Web 窗体添加到 Visual Studio .NET 中的项目,请执行以下步骤:
- 在解决方案资源管理器中,右键单击项目节点,单击“添加”,然后单击“添加 Web 窗体”。
- 在 “名称 ”框中,键入 SrcSample.aspx,然后单击“ 打开”。
切换到 “设计 ”视图,然后将 Web 窗体 标签 控件添加到.aspx页。
右键单击.aspx页,然后单击“ 查看代码”。 代码隐藏文件将在编辑器中打开。
在代码隐藏文件中,将以下代码添加到
Page_Load
事件:private void Page_Load(object sender, System.EventArgs e) { Label1.Text = "(Src): Page_Load fired!"; }
从代码隐藏类文件切换到编辑器中的.aspx页,然后切换到 HTML 视图。
在页面顶部,查看指令的代码
@ Page
。 代码应类似于以下默认代码:<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample"%>
若要简化此示例,请从项目中删除 Global.asax 文件。 仅在此示例中执行此操作,以防止与 Global.asax 文件的代码隐藏页相关的其他错误。
在“文件”菜单上,单击“全部保存”以保存 Web 窗体和其他关联的项目文件。
注意
由于希望此示例的代码隐藏类文件按需编译,因此现在不要生成解决方案。
如果遵循了“将继承属性与预编译类”部分中列出的步骤,则必须删除应用程序目录中的程序集
Bin
,然后才能执行本部分中的其余步骤。有关详细信息,请访问 本文的“故障排除 ”部分。
若要运行页面,请启动 Internet Explorer,然后手动输入页面的 URL。 不要从 Visual Studio .NET IDE 中选择 “在浏览器中 查看”或“ 浏览方式 ”选项。 否则,如果使用 Visual Studio .NET 2003,代码隐藏页将默认预编译到目录中的
Bin
程序集中。 查看页面后,将收到如下所示的错误消息:无法加载类型“CodeBehindSamples.SrcSample”。
发生此错误的原因是尚未编译代码隐藏类文件,并且尚未包含
Src
用于引用代码隐藏类文件的属性。将
Src
属性添加到@ Page
指令,如下所示:<%@ Page language="c#" Codebehind="SrcSample.aspx.cs" AutoEventWireup="false" Inherits="CodeBehindSamples.SrcSample" Src="SrcSample.aspx.cs"%>
该
Src
属性以代码隐藏类文件(SrcSample.aspx.cs)的相对路径列出,并且Inherits
属性值设置为引用CodeBehindSamples.SrcSample
。在“文件”菜单上,单击“全部保存”以保存 Web 窗体和其他关联的项目文件。 请记住,不要生成解决方案,因为您希望按需编译此示例的代码隐藏类文件。
若要运行页面,请启动 Internet Explorer,然后手动输入页面的 URL。 不要从 Visual Studio .NET IDE 中选择 “在浏览器中 查看”或“ 浏览方式 ”选项。 否则,如果使用 Visual Studio .NET 2003,代码隐藏页将默认预编译到目录中的
Bin
程序集中。 此时,页面应在浏览器中加载,标签将填充以下值:(Src): Page_Load fired!
代码隐藏类文件现已按需编译并正常运行。
故障排除
如果在 Visual Studio .NET 中预编译应用程序,然后尝试使用属性应用按需编译方法,可能会收到类似于以下内容的
Src
错误消息:编译器错误消息:CS1595:“ProjectName.CodeBehindClassName”在多个位置定义; 使用 '%windir%:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\YourProjectName\d1444413\36fce407\assembly\dl2\009389be\231afa2d_d586c301\YourAssemblyName 中的定义。DLL'
请记住,错误消息中列出的路径中 YourProjectName 后面的目录名称可能有所不同,因为 ASP.NET 会自动处理目录及其名称的生成。
如果使用该
Src
属性,则必须按照以下步骤解决与错误消息关联的问题:删除错误消息中引用的 YourProjectName 目录。 完成此步骤之前,可能还必须从命令提示符运行
iisreset
命令。 否则,可能会收到以下错误消息:无法删除 GeneratedName.dll:拒绝访问。
请确保磁盘未满或受写保护,并且该文件当前未使用。删除应用程序目录中的程序集
Bin
。若要运行页面,请启动 Internet Explorer,然后手动输入页面的 URL。 不要从 Visual Studio .NET IDE 中选择 “在浏览器中 查看”或“ 浏览方式 ”选项。 否则,如果使用 Visual Studio .NET 2003,代码隐藏页将默认预编译到目录中的
Bin
程序集中。
注意
Microsoft建议在使用 Visual Studio .NET 开发应用程序以避免此类问题时使用预编译方法,而不是按需编译方法(通过使用
Src
属性)。如果要或在单个文件中必须包含 Web 窗体页,请开发.aspx页以包含代码而不是代码隐藏类文件。
有关如何在 Visual Studio .NET 中开发单文件 Web 窗体的详细信息,请参阅 Visual Studio 2003 已停用的技术文档。
如果不预编译代码隐藏类文件,并且未将
Src
属性添加到@ Page
指令,或者属性的虚拟路径不正确,将收到以下错误消息:无法加载类型“CodeBehindSamples.SrcSample”。
部署.aspx页面时,如果预编译了关联的代码隐藏类文件,则只需将程序集部署到
Bin
应用程序的文件夹。 无需使用应用程序部署实际的代码隐藏类文件。部署.aspx页时,如果未预编译关联的代码隐藏类文件,则必须使用应用程序部署代码隐藏类文件。 此外,必须将属性添加到
Src
指令,@ Page
因为类文件在按需编译时必须可用。
参考
有关程序集的详细信息,请参阅 程序集。
有关与 ASP.NET 编程相关的更多文章、示例和其他资源,请参阅 ASP.NET。
有关 @ Page 指令及其各种属性的详细信息,请参阅 @ Page。
有关常规 Web 窗体语法的详细信息,请参阅 Web 窗体语法。
有关详细信息,请参阅 ASP.NET 代码隐藏模型概述。