细细品味ASP.NET

[复制链接]
查看11 | 回复7 | 2011-12-28 15:24:18 | 显示全部楼层 |阅读模式
概 述
 
ASP现在被从头到脚地重建了,结果就是 ASP.NET 。它并不只是ASP 4.0,它是一个用于 Web开发的全新框架,其中包含了许多新的特性。 ASP.NET 提供了更易于编写、结构更清晰的代码,这些代码很容易进行再利用和共享; ASP.NET 使用编译后的语言,从而提升性能和伸缩性; ASP.NET 使用Web表单使开发更直观,利用面向对象技术促进组件的再利用。另外, ASP.NET 中还包括有页面事件、Web 控件 、缓冲技术以及 服务器 控件 和对数据捆绑的改进。供 ASP.NET 使用的库以及在Microsoft.NET框架中允许通过Web 使用客户商用函数,为程序员提供了更多新的开发机会。
 
ASP.NET 的优势
 
ASP.NET 使代码更加干净。现有的ASP 应用程序中,不管你将它们写得怎么样,结构总是充满了长长短短的代码。而 ASP.NET 的代码不仅更容易编写,而且更加干净整洁,比ASP代码更易于阅读。同时, ASP.NET 代码的结构方式提高了其再利用性和共享性。
ASP.NET 改进了配置、伸缩性、安全性和可靠性。对于简单的ASP应用程序,配置其实并不算什么问题,但是当你移植到一个利用组件的N层结构中时就会遇到问题。当你对这些应用程序进行配置和维护时,DLL 陷阱问题(组件注册、版本、锁定的DLL等等)就会出现。 ASP.NET 中则取消了组件注册以及DLL锁定,全面使用了 XML 配置文件,从而解决了这个问题。这样你只需要执行复制文件的工作就能配置一个Web应用程序。
ASP.NET 对各种不同的浏览器提供了更好的支持。对于ASP开发人员来说,浏览器兼容问题好象是一个永恒的问题。你或者为低一级的浏览器编写代码,例如用HTML 3.2,或者限制页面的浏览范围。无线应用程序协议WAP设备的引入还会深化这个问题。本文中Web表单这部分描述了 ASP.NET 是如何解决浏览器兼容性问题的。
ASP.NET 造就了一类新的Web应用程序。目前的Web应用程序通常都是同一种模式:一套线性应用程序,然后将逻辑植入其中之一。 ASP.NET 允许开发人员打破这种单一模式,创造出更加动态而且伸缩性更强的应用程序,这种应用程序能够更好地满足公司的商业需求,并提供一个更加丰富的开发环境。
到这里你可能会想,虽然这些目标都很高尚,但是它们会使编写应用程序变得困难。然后恰恰相反,用 ASP.NET 进行开发要简单得多!
下面我们就来细细品味一下 ASP.NET 的强大特征,包括:
 ●对编译语言的支持
 ●Web表单
 ●跟随页面对象的页面事件
 ●Web 控件
 ●Web Services
 ●缓冲技术
 ●调试和跟踪
 ●代码和内容隔离
 ●名称空间的通用库
 ●配置
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
使用经过编译的语言
 
现有的ASP版本是基于脚本语言的,如VBScript和JScript 。脚本语言本身并没有什么错,但是它们有两大缺陷:它们是解释型的,并且分类不严格。 ASP.NET 并没有完全抛弃脚本语言的概念,它引入了对全编译语言的支持,使你能够用Visual Basic编写自己的 服务器 端代码,例如:



Name:





在表1中有两点值得注意。第一是在表单上 runat=“server” 属性和 asp:textbox 控件 的使用,这可以告诉 ASP.NET 服务器 和客户都可以使用这些 控件 。如此使用的 控件 叫做 服务器 控件 。asp: 用做 控件 名的前缀,它本身就识别了 控件 是从哪来的。稍后我将讨论这一点。第二个需要注意的细节是OnClick事件。开发 DHTML 代码时,你经常要用到 OnClick事件,这是为了在浏览器中激活一个事件。因为为 控件 设置了runat=“server” 属性,所以事件只在 服务器 上被激活。要对这个例子进行扩展,可以去掉 Response.Write,然后用一个基于 服务器 的 控件 来代替它,比如下面的表2代码:
表2 使用基于 服务器 的 控件




Name:







这个代码运行相当好,很象一个传统的客户或Visual Basic表单,代码也直观多了。你可以用 服务器 控件 来连接事件过程和基于 服务器 的代码。这些基于 服务器 的 控件 向浏览器发送纯 HTML内容,其中不再含有客户端脚本。实际上,这其中一个重要的设计目的就是要坚持使用固有的 HTML 3.2元素代码以提供最大可能的浏览器兼容性。
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
比如说,表2中的代码生成了以下HTML:



[I]
Name:







生成的代码是符合 HTML 3.2标准的。它执行一个标准投递,将用户输入发送回同一个文件。这里没有对 服务器 状态进行维护,也没有客户端脚本对状态进行维护。隐含的域执行对 控件 状态的维护,这意味着在页面的“提交-返回”之间, 控件 能自动恢复状态,而不需要任何编程干预。虽然 ASP.NET Web 控件 的默认输出是符合HTML 3.2标准的内容,但是对于更高级的浏览器如Microsoft Internet Explorer 5.0,也可以输出为 DHTML 格式。这样你就能只使用一套 服务器 控件 来编写页面,允许 控件 根据浏览器决定发送哪种类型的输出,从而允许你将发送 DHTML 的 控件 和客户端脚本用到最新版本的Internet Explorer中,将纯 HTML 3.2内容发送到其它浏览器中。
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
页面事件
?
在此前我提到 ASP.NET 已经被从头到脚地重写了,但是我并没有指出它是按照面向对象的思路重建的。在对象树的顶部是Page对象,即页面对象, ASP.NET 的每个 控件 、应用程序和页面都是从这个对象中继承来的,也就是说每个页面都是页面对象的一个例示。页面的Load (装载)事件是一个非常重要的事件,如下面的表3代码所示:
表3 使用页面事件







在这里你看到了以前在Visual Basic中经常见到的同样的 Load/Unload (装载/卸载)过程。 当页面被装载时,Load事件被激活,这时所有基于 服务器 的 控件 都可用。在与用户的交互作用过程中会生成其它事件。最后,当页面被卸载时激活 Unload事件。
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
Web 控件
?
你可能会担心,象 这样的 控件 代表了一套需要你熟练运用的全新 控件 。不过,它们并不难学,因为它们在HTML中都有对应者。例如,对于一个很简单的文本框,在HTML 中,你是这样做的:

而相应的Web 控件 是这样的:

在这两者中,你立刻就能注意到的是Web 控件 通过代码“asp:”名称空间来识别,并且同在 XML 中一样,使用斜线来结束元素。你不是必须使用 XML 的格式,你也可以使用HTML格式,用一个分号来结束标记:。但是你会发现, XML 格式被用在许多代码举例中,并且代码字数也较简洁。名称空间必须要使用,它负责识别文本框TextBox 控件 来自哪里。所有的标准Web 控件 都是 ASP名称空间的一部分。当编写自己的 控件 时,这一点变得很重要。
TextBox 控件 相对于标准的输入框好象没有多少优势,但是你应该考虑一下面的三个输入 控件 :



它们都是用于HTML输入的,但是并没有一致性。但是如果使用下面的,是不是更简单一些呢?



你可以看到,一个简单 控件 包含了HTML中三个 控件 的功能,而且更易记忆、更易编码。
ASP.NET 携带了5大类 Web 控件 :
? 与HTML相对应的固有 控件
? 在页面上提供数据流的列表 控件
?提供更丰富的UI(用户界面)内容和功能的Rich 控件
? 完成各种表单验证的确认 控件
? 为 WAP设备封装WML的移动 控件
固有的 服务器 控件 与 HTML 控件 相同,但是更加合理了,可提供更为一致的用途。这些 控件 包括LinkButton(链接按钮)、ImageButton(图象按钮)、HyperLink(超级链接)、TextBox(文本框)、CheckBox(复选框)、RadioButton(单选框)、DropDownList(下拉列表)、ListBox(列表框)、Image(图象)、Label(标签)、Panel(面板)、Table(表格)、TableRow(表格行)、TableCell(表格单元)。
列表 控件 包括Repeater(转发器)、DataList(数据列表)和DataGrid(数据栅格)。列表 控件 还包括RadioButtonList(单选框列表)和 CheckBoxList(复选框列表),这样就使创建单选框和复选框的列表变得简单。
Rich 控件 包括Calendar(日历)和AdRotator(广告旋转)。Calendar 控件 为低级的浏览器输出纯HTML,为高级浏览器输出 DHTML (如 Internet Explorer 5.0)。AdRotator输出图象,它有内置的旋转代码。
确认 控件 包括RequiredFieldValidator(请求域确认)、 Compare Validator(比较确认)、RangeValidator(范围确认)、RegularExpressionValidator(规范表达确认)、CustomValidator(顾客确认)和ValidationSummary(确认摘要)。这些 控件 为开发人员在表单处理中建立确认提供了简单的途径。
有关移动 控件 的信息现在还没有发布,但是可以肯定它们有助于构造激活WAP的Web站点。
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
编写新的 控件
?
你并不一定只局限于使用这些系统提供的 控件 ,自己编写 控件 也相当简单。例如,如果想要一个 控件 来封装两个文本框(可能是名和姓的输入域),就可以这样来编写代码:




可以把这个代码保存在文件 Name.aspc (注意这个新扩展名)中,并将其作为一个Web表单 控件 来对待。接着,就可以向 Web表单中增加以下内容:




这样你就可以很容易地创建可以再利用的 控件 了。这真实很美好 ;-) 你还可以直接在Visual Basic或 C#中创建 控件 ,允许它们成为其它 控件 的子类,并且呈现任何它们所要求的输出。因为 控件 是用名称空间来识别的,因此在 控件 之间应该是没有冲突的。实际上, 控件 甚至可以使用同一个名字,只要它们在不同的名称空间中就行。你会感觉到,这使得 ASP.NET 非常具有扩展性,并且使编程环境变得越来越丰富。实际上有一个很大的提供丰富 控件 的第三方市场。
?
数据捆绑 控件
?
新的Web 控件 之一是数据栅格DataGrid,这是用于显示成套数据的内置支持 控件 。为了从SQL生成的数据中产生一个 HTML表格,你只需要创建 ADO+对象,并执行指令来获取数据以作为栅格的数据源,比如下面的表4代码:
表 4 DaveSGrid1.aspx







所需要做的就是将数据捆绑到数据栅格,然后就生成了一个整洁的HTML表格:
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
数据捆绑并不局限于来自 数据库 的数据,你还可以捆绑到hash表格、数组、其它 服务器 控件 、页面的适当层,几乎什么都可以。如果默认的栏目不合适,还可以对其进行定制,让其显示你所感兴趣的部分:






使用 BoundColumn 控件 选择一个简单的栏目,并指定栏的标题和这栏要捆绑到哪里。 AutoGenerate=“false” 属性负责确保栅格不会为你创建所有的栏目。如果想更复杂一些,也可以为这个栏目使用一个模板。
此前提到的Repeater和DataList 控件 也支持模板,这样就允许对 控件 的外观进行定制。Repeater实际上并没有外观,你必须要提供 UI,这就意味着必须要使用一个模板。相反,DataList 控件 是一个捆绑到数据的列表,有一个默认的外观和丰富的行为。为这两个 控件 添加模板的方法是一样的:


Here”s your list of titles







有了这个模板template,你就可以指定用哪些 HTML 控件 来组成数据捆绑 控件 的每一部分。有5个模板的名字可以与 DataList 控件 一起使用:HeaderTemplate用于 控件 的最顶端部分,ItemTemplate 用于各个项目,Alternating-Item-Template用于其它项目,SeparatorTemplate用于各个项目之间的区域,FooterTemplate用于 控件 的底部。
这个系统的好处在于:对于如何显示界面,有大量的 控件 可以使用。进一步使用产品列表,你就能用表7中的代码来生成下图所示的输出:

表 7 DaveSGrid2.aspx



[td]
[img][/img]
“ >

Name:

Description:

Price:




这个代码相当简单,除了前面显示的 DataList代码外,不再需要更多的东西。代码里有一点值得注意,就是你可以规定出现的栏数,列表会自动处理栏的包装。这样就只需要一点格式化代码,Web页面就得到了极大的改进,而不再使用以前Web 页面上的传统栅格。
回复

使用道具 举报

千问 | 2011-12-28 15:24:18 | 显示全部楼层
开发Web Services(Web服务)
?
在Internet上作为服务发布的 软件 是 Web Services的核心。 ASP.NET 提供了一个 Web Services的基础构造环境,从而使开发人员能够为这个服务模型创建服务。
现在我们来跟踪一个简单的例子。比如说你要从一个在线书商那里购买书籍,他们有一个跟踪系统,使你能够看到自己定单的状态。书商用一个陆地运输公司来运输你订的货。这个运输公司也有一个跟踪系统。这样,为了得到你的定单的确切状态,你要查看两个站点。如果书商能够将它自己的定单状态和运输公司的状态信息一同显示出来,就会很方便。
Web Services就允许你在Web上将客户商用函数暴露给公众,例如包裹跟踪细节。编写一个对象,将其方法作为URI暴露出来,URI返回一个 XML 数据。现在书商可以调用运输公司的跟踪服务,并将跟踪的结果合并到它自己的定单跟踪应用程序中。以下是运输公司如何用 C#创建一个服务的代码:

using System.Web.Services;
public class Shipping {
[WebMethod]
public String OrderStatus(String OrderNumber) {
// code here to retrieve order details from data store
return Status;
}
}
以上代码保存于 Tracking.asmx文件中,位于运输公司 Web站点的应用程序目录中。这样书商就可以使用多种方法来调用这个 Web Services了。比如使用 HTTP-GET,参数同查询字符串一同被传递:
http://orders.ups.com/orders/Tra ... ?OrderNumber=BRU123
书商还可以使用 HTTP-POST,方法的参数作为表单值在post体内传递。或者还可以使用HTTP-SOAP,方法的参数被包裹在一个工业标准 XML 格式中。
现在用户只需要在书商那里查询他们的定单细节,书商的 Web 应用程序就会从运输公司那里收集跟踪信息,然后同书的状态一起返回。书商也可以将它的定单状态细节作为一个Web Services暴露出来,让其它人使用它。
Web Services的伟大之处在于,它允许你暴露一个服务而不必暴露数据或所有的商业规则。当自动提供商业服务的同时,代码和数据都是安全的。在以后几年里,随着B2B方案的可利用,Web Services的市场会得到快速的增长。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行