科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件ASP.NET 2.0中的代码隐藏和编译(1)

ASP.NET 2.0中的代码隐藏和编译(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文描述这个新的代码隐藏模型、它的基本原理,以及 Web 开发人员将如何使用它。并介绍该模型的一些潜在的副作用以及如何在设计中解决它们。请注意,ASP.NET 2.0 运行时完全支持 1.x 模型,因此针对 1.x 编写的应用程序可以在无需修改的情况下直接运行。

作者:MSDN 来源:MSDN 2007年9月2日

关键字: ASP.NET 代码 隐藏 编译

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共19页)

代码隐藏

虽然该代码隐藏模型在 2.0 中是不同的,但是它的语法已经进行了少量更改。实际上,该更改十分细微,如果您不仔细查看,甚至都无法注意到它。图 1 显示新的代码隐藏语法。

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="MsdnMag.Default" %>

Default.aspx.cs

namespace MsdnMag

{

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

 {

protected void Page_Load(object sender, EventArgs e)

{}

 }

}


该模型与以前的 1.x 模型有两个区别 — 在 @ Page 指令中引入了 CodeFile 属性,以及将代码隐藏类声明为部分类。当开始生成该页时,您将注意到另一个区别 — 服务器端控件不再需要在代码隐藏类中显式声明,但是您仍然能够以编程方式完整地访问它们。例如,图 2 中的窗体有若干个在代码隐藏文件中以编程方式使用的服务器端控件,但是您可以注意到,代码隐藏类中缺少任何显式控件声明。

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="MsdnMag.Default" %>

<!DOCTYPE html PUBLIC "..." "...">

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

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

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

<div>

Enter your name:

<asp:TextBox ID="_nameTextBox" runat="server" /><br />

<asp:Button ID="_enterButton" runat="server"

Text="Enter" OnClick="_enterButton_Click"/> <br />

<asp:Label ID="_messageLabel" runat="server" />

</div>

</form>

</body>

</html>

Default.aspx.cs

namespace MsdnMag

{

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

 {

protected void _enterButton_Click(object sender, EventArgs e)

{

 _messageLabel.Text = "Hello there " + _nameTextBox.Text + "!";

}

 }

}


其中的原因与应用于代码隐藏类的部分关键字有关。除了使用呈现该页的方法将 .aspx 文件转换为一个类定义(正如它已经做的一样),ASP.NET 现在也为包含受保护控件成员变量声明的代码隐藏类生成一个同辈部分类。然后,您的类与该生成的类定义一起编译,并用作针对 .aspx 文件生成的类的基类。结果是,您基本上以经常使用的方式编写代码隐藏类,但是您不再需要声明(或让服务器为您声明)服务器端控件的成员变量声明。这一直是 1.x 中一个不太稳定的关系,因为如果您无意间修改了一个控件声明,使得它不再与该窗体上所声明控件的 ID 匹配,就会突然停止工作。现在,成员变量以隐式方式声明并始终是正确的。图 3 显示所涉及类集的一个示例。

Class for ASPX file generated by ASP.NET

namespace ASP

{

 public class default_aspx : MsdnMag.Default

 {

...

 }

}

Sibling partial class generated by ASP.NET

namespace MsdnMag

{

 public partial class Default : IRequiresSessionState

 {

protected TextBox _nameTextBox;

protected Button _enterButton;

protected Label _messageLabel;

private HtmlForm form1;

...

 }

}

Codebehind partial class that you write

namespace MsdnMag

{

 public partial class Default : Page

 {

void _enterButton_Click(object sender, EventArgs e)

{

 _messageLabel.Text = "Hello there " + _nameTextBox.Text + "!";

}

 }

}

请注意,该部分类模型仅当在 @ Page 指令中使用 CodeFile 关键字时使用。如果使用不带 CodeFile(或者带有 src 属性)的 Inherits 关键字,ASP.NET 会使用 1.x 代码隐藏类型并简单地将类设置为 .aspx 文件的唯一基类。此外,如果您根本没有代码隐藏,则类生成与它在 1.x 中的操作将完全相同。由于 ASP.NET 2.0 向后与 1.x 兼容,因此现在有大量代码隐藏选项供您使用。

Visual Studio 2005 将使用任何 Web 窗体新的部分类隐藏模型,而且如果您使用转换向导,它也将很好地转换 Visual Studio .NET 2003 项目以便使用新模型。因为 ASP.NET 2.0 的一些新功能依赖于它的原因,所以如果可能,最好将所有文件转换为新代码隐藏模型(如果使用 Visual Studio,那么转换几乎是唯一的选择,因为 Visual Studio 2005 不会打开未转换的 1.x 项目)。例如,对 Profile 属性包的强类型访问添加到 2.0 中代码隐藏类的同辈部分类中,但是如果您使用 1.x 代码隐藏模型,则该强类型访问器直接添加到 .aspx 生成的类定义中,而且对于代码隐藏类不可用。这也适用于强类型的母版页和以前的页访问。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章