我还记得在 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) {} } } |
| 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 + "!"; } } } |
| 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 + "!"; } } } |
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 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器