`
raisun_1988
  • 浏览: 117861 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

ASP.NET:革命,不是革新

    博客分类:
  • Web
阅读更多
ASP.NET:革命,不是革新
微软本来只需要对Web应用平台ASP作稍加改进,比方提供一个功能更强的服务器端脚本编程语言或者页面编译功能就可以保持或者甚至提高ASP的流行度。实际上ASP.NET提供了这两个功能--但是它还提供了更多的东西。简单的说,ASP.NET是一场革命。在本文中,我将讨论ASP.NET对于Web编程所做的提高。

在ASP模型中,一个页面是通过HTML定义然后是通过嵌入的脚本扩展的。在ASP.NET中,不同的是,一个页面是一个生成HTML的类。这个模型被称为WebForm。如果这个名字让你想起VB6的表单控件或者.Net WinForms,那么你摸到点边了。对于WebForms来说,Web服务器控件都放在一个页面上。当这个页面被访问的时候,这些控件自动将它们以HTML的方式实现。浏览器和服务器之间的复杂过程对程序员来说是透明的,由服务器自动完成,并允许事件处理,就和WinForms一样。

欢迎页面
让我们马上开始创建一个叫Greeter(欢迎者)的例子然后看看它是如何工作的。我在学习一个新技术的时候喜欢将它们拆开然后再凑成一整块。Greeter仅仅是要求用户输入一个名字然后发出一条问候消息,但是它演示了ASP.NET的几个主要特点。

Greeter页面定义在两个文件中:Greeter.aspx,在列表A中,和Greeter.aspx.cs,在列表B中。.aspx文件定义了页面的UI(用户界面),而C#文件(你也可以使用Visual Basic.Net或者 JScript.Net)在GreeterLogic类里实现了这个页面的逻辑。Greeter.aspx文件第一行的@Page指令通过继承将UI绑定在程序逻辑上。这个指令中的ClassName属性将UI类的名字指定为CreeterUI。而Inherits属性指定GreeterUI是从GreeterLogic继承而来的。

Web服务器端控件
在这个页面的<form>置标中申明了几个Web服务器端控件。Web服务器端控件是标准HTML置标的WebForm抽象化。它们与标准的HTML相比能够提供事件处理并生成更多的功能。Web服务器端控件在一个引用asp命名空间的XML置标里被申明。.aspx文件中的每一个Web服务器控件在页面被执行的时候会导致控件的一个实例被创建。对每个实例的引用在其相应的基类中被保持。这便使得基类能够访问这些控件并能够让它用程序控制这些控件并处理这些控件产生的事件。每个Web服务器端控件指定属性runat="server"来表明这个控件在Web服务器端运行以便为目标Web浏览器生成合适的HTML。

最开始的三个Web服务器端控件是相当直观的:标签控件(label),文本框,和一个提交按纽。最后的一个控件,<asp:RequiredFieldValidator>,是不同的。一个验证控件检查另一个控件的状态并且当目标控件没有处于正确状态的时候会阻止这个表单被提交。在Greeter这个程序中,RequiredFieldValidator控件被用来验证一个数据是否已经被输入到了文本框控件里。它并不关心这个数据的值是多少。初始状态下,RequiredFieldValidator控件是不可见的。如果在按纽被单击的时候文本框是空的,那么就不会产生单击消息,而且RequiredFieldValidator控件会显示ErrorMessage属性的属性值,如图B。对于高版本的浏览器来说,RequiredFieldValidator控件生成JavaScript以在客户端进行数据验证。而对于低版本的浏览器来说则需要在服务器端进行验证。ASP.NET除了RequiredFieldValidator控件外还提供了几个验证控件。

GreeterLogic
GreeterLogic从类System.Web.UI.Page继承而来。它申明了几个protected数据域来保存对Greeter.aspx文件中创建的控件的引用。GreeterLogic定义了两个方法。OnInit方法重载了方法Page.OnInit来为m_Button单击事件添加一个m_Button_Click方法的代理。m_Button_Click方法处理由m_Button Web服务器端控件生成的单击事件。这个单击事件触发一个到服务器端的数据发送过程。在服务器端,ASP.NET重新生成这个页面然后恢复WEb服务器控件的状态。现在文本框的值就可以通过访问TextBoxText属性得到了。
配置Greeter程序
要配置Greeter应用程序,你可以遵循下面的步骤:

创建一个应用程序的目录。

在应用程序的目录里创建一个bin子目录。

Greeter.aspx放在应用程序目录里。

使用命令csc /t:library /out:Greeter.dll Greeter.aspx.csGreeter.aspx.cs编译成一个库文件然后把Greeter.dll放在应用程序的bin子目录里。

创建一个指向应用程序目录的IIS虚拟目录。

.aspx类的生成
ASP.NET应用程序是由IIS ISAPI过滤器aspnet_isapi.dll处理的。在第一次访问的时候,ISAPI过滤器在ASP命名空间下从Greeter.aspx生成一个.NET类然后把它编译成一个二进制库文件。IIS会自动搜索应用程序的bin子目录来寻找GreeterLogic基类。图D显示了生成的类的继承关系。生成的二进制文件会放在一个根据应用程序的虚拟目录而生成的一个存放临时ASP.NET文件的目录里。例如,如果Greeter的虚拟目录被命名被IntroASPNET,那么Greeter.aspx可能会生成一个名字为effla-hh.dll的二进制文件,并且放在诸如C:\WINNT\Microsoft.NET\Framework\v1.0.3328\Temporary ASP.NET Files\introaspnet\b5d8b0af\51648ab7这样的一个目录里。

如果Greeter.aspx被修改了,那么ISAPI过滤器会在下一次页面访问的时候自动重新生成二进制文件。


ASP.NET是实打实面向对象的
那么所有这些意味着什么呢?ASP.NET提供了一个真正的面向对象的编程模型。WebForms能够让页面的UI完全独立于页面的逻辑而被创建然后通过继承而结合起来。不会再有夹杂着HTML和VBScript的页面了。页面的逻辑是使用一种全功能的.NET语言,比方C#, Visual Basic.NET, 或者 Jscript.NET实现的。更进一步的说,页面逻辑的实现过程可以随意使用所有的.NET基类类库。Web服务器控件封装了不同Web浏览器之间的区别并允许你从更高的级别来设计Web页面。所有的一切都会被编译成微软中间语言(MSIL)并且能够在运行时同步转化成机器码。不会再有解释性页面中存在的那种性能损失了。如果这还不能叫做一种革命的话,我就真的需要一本新的字典了:-)。

<html>
<head>
<title>Greeter.aspx</title>
</head>
<body>
<form id="QueryName" method="post" runat="server">
<!-- Heading -->
<asp:Label id="m_Heading" runat="server" Font-Bold="true" Font-Size="16pt" Text="Please enter your name:">
</asp:Label>
<br>
<!-- Input controls -->
<asp:Label id="m_Label" runat="server" Font-Bold="True" Text="Name:">
</asp:Label>
<asp:TextBox id="m_TextBox" runat="server" Width="152px"></asp:TextBox>
<asp:Button id="m_Button" runat="server" Text="Get Greeting"></asp:Button>
<br><!-- Input validation -->
<asp:RequiredFieldValidator id="m_Validator" runat="server" ControlToValidate="m_TextBox" ErrorMessage="You haven't entered your name!" ForeColor="Red">
</asp:RequiredFieldValidator>
</form>
</body>
</html>

using System;namespace TechRepublic
{
public class GreeterLogic : System.Web.UI.Page
{ // Protected data members: // - Server controls created by the .aspx derived class.
protected System.Web.UI.WebControls.Label m_Heading;
protected System.Web.UI.WebControls.Label m_Label;
protected System.Web.UI.WebControls.TextBox m_TextBox;
protected System.Web.UI.WebControls.Button m_Button;
protected System.Web.UI.WebControls.RequiredFieldValidator m_Validator; // Initialize the page.
override protected void OnInit( EventArgs e )
{ // Attach an event handler for the GetGreeting button click.
this.m_Button.Click += new System.EventHandler( this.m_Button_Click ); // Initialize the base class.
base.OnInit( e );
} // Handle the "Get Greeting" button click.
private void m_Button_Click( object sender, System.EventArgs e )
{ // Set the greeting in the heading.
m_Heading.Text = "Greetings " + m_TextBox.Text + "!"; // Hide the label, text box and button.
m_Label.Visible = false;
m_TextBox.Visible = false;
m_Button.Visible = false;
}
}
}
分享到:
评论

相关推荐

    asp.net 3.5 unleashed

    Entity Framework是ASP.NET 3.5中另一个重要的技术革新,它是一种对象关系映射(ORM)工具,用于将数据库中的数据映射到对象模型上。通过Entity Framework,开发者可以以面向对象的方式操作数据库,而无需关心底层的...

    asp.net基于ajax技术的邮件系统

    ASP.NET结合Ajax技术,为邮件系统的设计与开发带来了革命性的变化。通过局部更新、异步回传等特性,大大提升了系统的响应速度和用户体验。同时,利用ASP.NET Ajax提供的丰富控件,开发者能够更便捷地实现复杂的交互...

    ASP.NET Framework深度历险

    本文旨在解析ASP.NET框架下HTTP请求的生命周期,对比传统ASP技术,揭示ASP.NET技术革命性的变化,以及如何深入理解其底层架构,从而成为一名真正的ASP.NET开发高手。 #### 二、ASP.NET框架概览 ASP.NET是Microsoft...

    ASP.NET 3.5 开发大全

    ASP.NET是在传统ASP基础上的一次重大革新。尽管名称相似,但两者在设计哲学和技术实现上存在着本质的区别: - **执行模型**:传统ASP依赖于解释器逐行解析脚本,而ASP.NET则采用编译后的中间语言(MSIL),通过CLR...

    Asp.net 2.0高级编程第一章

    从最初的Active Server Pages (ASP) 3.0 到 ASP.NET 1.0 的发布标志着一个革命性的转变,而在 ASP.NET 1.0/1.1 之后发布的 ASP.NET 2.0 同样带来了许多令人兴奋的变化。 ##### 1.1.1 桌面应用程序时代 在互联网...

    c#web开发技术

    #### .NET框架与ASP.NET:革命性的技术平台 在探讨C# Web开发之前,我们首先需了解其基石——.NET框架与ASP.NET。.NET不仅仅是微软的一个产品,更代表了计算模式的革新与软件服务化的新商业模式。它作为应用基础...

    .NET Compact Framework 3.5版的新特性(Video)

    3. ASP.NET Mobile改进:.NET Compact Framework 3.5改进了对ASP.NET Mobile的支持,提供更好的页面布局和样式控制,使得开发者可以更方便地创建适应不同屏幕尺寸和设备特性的Web应用。 4. ADO.NET实体框架:尽管是...

    CSDN开发高手03-11

    - **ASP.NET**:ASP.NET是Microsoft开发的服务器端脚本环境,在HTML页面中可以直接嵌入.NET语言代码(如C#或VB.NET)。它提供了丰富的工具和控件,使开发者能够快速构建动态网页和Web应用程序。 - **JBuilder9与...

    WPF教程(中文)ch01

    WPF是.NET Framework的重要组成部分之一,它不仅与.NET Framework紧密结合,还与其他.NET技术如ASP.NET、Entity Framework等形成了互补关系。这意味着开发者可以利用.NET生态系统的全部优势来构建高质量的应用程序。...

    vs2008特性大全

    除了基本的JavaScript注释支持,VS2008还兼容ASP.NET AJAX控件工具包的文档摘要注释格式,使得开发者可以为类、方法和参数添加详细的描述,同时实现JavaScript的本地化。这种灵活性使得不同文件间的JavaScript ...

    计算机史话和Web开发技术史话

    例如,早期的Web主要是静态的,而现在我们有了动态服务器端脚本、框架和库,如PHP、ASP.NET、Java以及前端的React、Vue和Angular等,这都是Web技术进步的体现。同时,随着移动互联网的普及,移动优先的设计理念和跨...

Global site tag (gtag.js) - Google Analytics