塞伯坦

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这篇文章仅为说明Ajax.net是什么以及它到底为我们提供了是什么?关于Ajax的原理请自行查询资料,建议在看此章请先简单了解一下Ajax的基本概念和原理。在此我就不对Ajax加以说明了。
Ajax.net扩展了现有的asp.net技术使你轻易的应用火热的Ajax技术变得更加的方便和便利。它可以在你不需要了解更多的Ajax技术细节并且更少的改动有的Web开发模式下轻易的使用Ajax技术。在.net framework 3.5中它已经被集成到了Asp.net中。

Ajax.net 1.0 是一个类库,并没有集成到.net framework2.0中。一般的类库概念就是组织一堆相关的功能到一个程序集中(dll)。然后可以方便的应用其中的功能(当然是面向对象的)。然后,Ajax.net类库和特殊,它除了一个dll文件外还包括一堆的Javascript代码。Ajax.net最大贡献就是建立一个可以在任何web开发环境都可以使用的客户端类库(client side)。想想也是,Ajax技术本质就利用了Javascript。然而,Ajax.net不是简单的使用Javascript代码来封装了Ajax功能,而是提供了一个更为好用的,更有效的客户端类库。它使用类似的面向对象的概念极大的扩展了原生态的Javascript。

Ajax.net 1.0有两个部分组成,除了前面说的client side library 还有所谓的Server side library(当然它是dll的形式)。下面的图例说明了Ajax.net 1.0的整体结构。

   

上图中你可以明确的看到两个部分。其中Client就是我前面提到的客户端Library.我就先从此说起。它提供了一下的几点特征:

  1. 它建立了客户端组件和控件的概念。Components层次下实现了这一切。

    这里有一个不同的概念我需要说明一点。一般来说,组件和控件的概念都出现在应用程序中,一般是应用程序在使用各种组件或控件。可现在对于页面而言怎么也可以有类似的概念呢?这就是我要说明的一点,在Ajax的概念下做Web的开发,我们已经不能再把页面看成是简单的页面而已。Ajax的一个基本想法就是把更多的事情放在客户端去做。基于此,Ajax.net给了我们一个新的概念,那就是当以个页面载入后,它应该被看成是一个应用程序被载入。只不过是这个应用程序不再是我们想象中用C#、java这样的语言编写出来的界面而已。从不同的角度想想把页面当成是应用程序是也不是一个很坏的主意(难道javascript就不能建立这一切吗?)。答案已经被ajax.net肯定了。所以,但你在做Ajax开发的时候应该要想想页面是应用程序了。

  2. 它可以让你更加方便的使用javascript操作DOM(DOCUMENT OBJECT MODE).

    DOM,是我们访问浏览器中各种对象的做好的方式。但使用javascript来操作它不是一件很容易的事情。比如在Ajax.net 中提供了很多更为方便的写法(其实叫快捷方式)比如:$get('elementID') 它等同于document.getElementByID('elementID'),在比如我想知道操作的div的宽度和坐标信息。一可以使用Sys.UI.DomElement.getBounds($get('elementID')).X 或 Sys.UI.DomElement.getBounds($get('elementID')).width 或 Sys.UI.DomElement.getBounds($get('elementID')).Y等这样的写法。

  3. 它扩展了原生态的javascript 并支持面向对象的概念,也就是说如果你使用它就可以使用javascript来建立命名空间、类、接口、实现继承、创建对象。

    原生态javascript中的基础类型,它都做了必要的扩展。使用起来就会更加的方便。支持面向对象的概念会使得习惯了使用C#这样面向对象语言的人编写javascript代码更加的方便。你可以想象…

  4. 它使得异步访问服务器更加的简单。你只需要操控相应的Networking层次下的对象就可以方便的做到。(我个人认为如果你正的有兴趣去使用原生态的javascript去调用远端的服务是一件比较麻烦的事情,起码是一件不怎么利于快速开发的事情)

说道这里,远远没法说清楚Ajax.net Client side library的全部特性。如果你想好好学习一下以上提到的这些内容,我可以给出一个学习的方式供大家参考。

  1. 毕竟client side 使用javascript编写的,所以了解原生态的javascript是必要的。
  2. 其次ajax.net对javascript的基本类型和概念做了扩展,所以接下来要了解的就是这。
  3. Ajax 一定需要你了解DOM这个东东,所以了解它以及知道怎么操作它是重要的。Sys.UI命名空间中包含了一下有用的类辅助你操作DOM.
  4. 无法操作异步联络服务器,ajax也就没有什么益处了。了解基本的Ajax 的原理是必要的。在Sys.Net命名空间中包含了如何发起和管理异步请求的所有功能。
  5. 页面就是应用程序这个概念要深入脑海中。当你在和ajax工作在一起的时候请不要忘记这一点。页面不再是页面了,它神奇的变换成了程序。好好的了解一下Sys.WebForms命名空间的东西是必要的。

还没法说完这一切。在http://www.asp.net/站点中有Ajax.net 1.0 的说明文档,下载它怎么都是必要的。

上面只是说了一半。它只是指明了客户端的一些状态。 Ajax.net是一种服务器客户端的架构,那一定还要描述一下服务器端的功能。说前我还需要啰嗦几句客户端的问题。上面我的观念中,你们也许可以体会到一种变化,这种变化就是不能在什么事情都依赖与服务器帮你去做了。比如呈现,状态的改变和维持等等,起码是不能想传统的web方式那样去做了。我个人认为这点变化是巨大的,对习惯用C#这样的服务器应用程序开发者而言可以说是不习惯。Javascript是那种没有什么良好提示工具又没有面向对象概念的语言(更类似与动态语言那样)。

 

第二部分我开始讲讲Ajax.net的服务器功能。首先要说明的一点,这个架构并没有能改变服务器端开发的任何习惯和概念(我不希望这样描述,但其实就是这样的)。它提供了一套很有用的服务器端的控件,这是微软的特色了,方便了很多的开发人员和架构设计者。

控件:

ScriptManager这是必须的控件,如何需要Ajax"效果"的页面中一定要包含一个这样的控件并且也只能包含一个。它的作用就是帮你向客户端产生Ajax必要的脚本(Javascript代码段),使得你无需做任何事情就可以从客户端发送异步的请求并接收来至服务器的响应。当然它比我描述的更加的强大。

UpdatePanel 这是一个很好用又很容易让你恨它入骨的控件。他能轻易的帮你实现无刷新更新界面元素的控件。你要做的事情就是拖入这个控件然后在其控件范围中放入一堆的控件,再然后依据正常的服务器端编程逻辑编写必要的代码就OK。它支持绝大部分的服务器端控件的功能。很是好用。狠它入骨的东西我会在后面提到。

UpageProgress : 当UpatePanel发起异步请求的时候它会给予指示,以便用户能知道正在发生一些事情,对大数据量或延时很长的页面而言是很有用的。

Timer : 这是一个定时器,可以协助你自动的发起异步请求(一段时间)。

对服务的支持:

Ajax的一种思想是,服务器处理数据,客户端处理接收并呈现结果。所以,它对这种思想的支持是良好的。我们可以通过在服务器建立WebService这样的服务和客户端的Javascript代码段直接交互。而不再需要服务器又处理数据又负责呈现工作。它允许我们只需要正常的建立服务或PageMethod在页面中然后使用它提供的ScriptService或ScriptMethod Attribute就可以了。剩下的工作它帮你做了。其实这个过程类似于我们用asp.net应用程序和WebService交互的过程。它会在在客户端使用Javascript生成必要的服务代理对象(Ajax.net是支持面向对象概念的。我前面说过了)。

 

要认识Ajax一定要认识到,它是一种"两分化的技术",它需要客户端也需要服务器。传统的Web主要依赖于服务器端技术,而Ajax是既需要客户端也需要服务器端。在编程思想上也要改变一下,页面是应用程序,服务器也是应用程序,更理想是的这两种应用程序通过通讯来完成交互。然而,Ajax.net是在原有的Asp.net技术上构建起来的。它使用起来很方便,不过我们需要更多的去改变一下编程的思想,不能在用纯服务器端编程的方式去做Ajax。

我说一种现象。UpdatePanel很好用,然而它却并没有减少多少通讯和服务器的负担。当你点击UpatePanel中放置的任何可以导致页面Postback的服务器控件的时候它都会起作用,然而请注意,这依然是一种Postback,它会引发页面重新走一边生命周期中需要走的过程。这以为着虽然不会导致页面刷新但依然会导致服务器重新计算和页面相关的所有的算法。如果你在页面周期中需要执行很多的任务那就导致任务响应延时变长,即使的页面不刷新和用户还是要花很长的时间去等待结果的回来。

///

///完成

///

posted on 2009-01-01 00:23  蔡鹏  阅读(795)  评论(4编辑  收藏  举报