选择显示字体大小

asp.net 2.0 中的代码隐藏和编译


  我还记得在 2003 年的 8 月坐在 microsoft 公司的一个房间内倾听 scott guthrie 和其他人(包括我的同事 rob howard,他也是专栏作家)介绍 asp.net 2.0 的大量新功能。 他们演示了一个又一个功能,这些功能令我们非常吃惊,因为它们极大地简化了 web 开发,而且是以可插入和可扩展的方式实现的,因此在开发过程中能够以任何所需级别进行更改。

  后续测试版本中进行了大量更改,多数是以修改、错误修复和控件附加的形式进行的。但是,有一个功能(代码隐藏模型)自从第一个预览版以来已经进行了大量更改,这主要是为了响应客户的反馈。现在即将发布之时,我想利用这个机会描述一下这个新的代码隐藏模型、它的基本原理,以及 web 开发人员将如何使用它。我也会介绍该模型的一些潜在的副作用以及如何在设计中解决它们。请注意,asp.net 2.0 运行时完全支持 1.x 模型,因此针对 1.x 编写的应用程序可以在无需修改的情况下直接运行。

  代码隐藏

  虽然该代码隐藏模型在 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 生成的类定义中,而且对于代码隐藏类不可用。这也适用于强类型的母版页和以前的页访问。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons