AJAX .Net组件用户指南
翻译by:Ekin.S.Sun
例子下载
背景
异步JavaScript和XML (AJAX)最近变得非常流行,它不仅仅被小范围运用,像Google公司在Google推荐中诸如Google地图也使用了该技术。 在ASP.Net环境中, AJAX允许服务器端无回调处理客户端(浏览器)事件,因而降低了服务器性能要求。 换句话说它从服务器为异步分派和进程请求提供一个框架。 AJAX是对现有知识的整合,它不是全新的技术,然而却是对这些技术进行的全新整合(整体,这便是AJAX)扩充。
使用Michael Schwarz的AJAX .Net 组件可以使ASP.Net开发人员快捷,简便地利用AJAX部署配置页面文件。用户应该注意该组件处于开发的初期,因此它并不是如此地成熟。
应该指出的是有些诸如AJAX可能导致程序违反多层结构的规则(程序多层结构)。 依我的观点来看AJAX增加逻辑层数的可能(或坏,业务层)将沦为表示层。严密的架构师,比如我,也许会因为这种想法而畏缩。我认为,即使AJAX的使用轻微地违犯分层的界限,结局也是很值得的。 当然,有些方面您也需要依据您特定项目和环境综合考虑。
|
了解更多的 AJAX知识, 请访问: |
工作原理 – 总览
AJAX依靠中介来分派和处理发往或是来自于服务器的请求。为了完成这项任务,.Net 组件使用客户端的XmlHttpRequest对象。 多数浏览器对XmlHttpRequest对象支持都很好,这是使它成为一个可以选择的解决方案。因为组件的目的是隐藏XmlHttpRequest的执行,我们将不对它进行详细的讨论。
组件的运作通过将.Net函数标记为AJAX方法来实现。 一旦标记, AJAX使用XmlHttpRequest对象创建相应的JavaScript函数,在客户端(和其他的JavaScript函数一样)和在服务器端被称为代理。这些代理标明回到服务器端函数的途径。
复杂?其实不染。让我们来看个简单的例子。以下是.Net函数:
'VB.Net public function Add(firstNumber as integer, secondNumber as integer) as integer return firstNumber + secondNumber end sub |
//C# public int Add(int firstNumber, int secondNumber) { return firstNumber + secondNumber; } |
Ajax .Net 组件将自动地创建一个由两个参数组成的被称做“Add”的JavaScript函数。当这个函数被JavaScript(在客户端)调用的时候,请求将传递到服务器端并返回结果值到客户端。
初学阶段
首先我们进入为你的项目“安装”.dll文件的步骤。如果你知道如何添加一个动态库文件引用,可以跳过这个步骤。
首先,如果你还没有这个组件,下一个最新版本的,将压缩包解压的ajax.dll放在你的项目中的文件夹中。在Visual Studio.Net编译器中,在解决方案浏览器的“引用”接点上点击右键,选择添加引用。在新的打开对话框,点击浏览并找到引用文件/ ajax.dll,然后点击打开和接着的Ok.现在你已经可以使用AJAX .Net组件开始你的编程了。
|
如果你在添加引用过程遇到困难,请到这里需求帮助: |
设置 HttpHandler
要使所有的东西都能顺利运行,第一步要在web.config里面设置组件的HttpHandler方式。没有必要详细地探索和什么是HttpHandlers以及它是如何工作的,只要知道它们是被用来处理Asp.Net请求的就足够了。例如,所有*.aspx页面请求都是由System.Web.UI.PageHandlerFactory这个类处理的。同样的我们将做所有对ajax/*.ashx 的请求都由Ajax.PageHandlerFactory 处理:
<configuration> <system.web> <httpHandlers> <add verb="POST,GET" path=" </httpHandlers> ... <system.web> </configuration> |
上述代码主要是告诉ASP.Net对于任何能比配指定路径(ajax/*.ash)的请求都将被Ajax.PageHandlerFactory处理,代替默认的处理工厂。你没有必要创建一个ajax子目录,这是一些被简单使用的虚拟目录,这样以便其它HttpHandlers用他们自己构建的的子目录使用ashx 扩展名的文件。
设置页面
现在我即将开始编码。创建一个新页面或者打开一个已经存在的页面的后台代码文件,在Page_Load事件中添加以下的代码:
'vb.net Public Class Index Inherits System.Web.UI.Page
Private Sub Page_Load(sender As Object, e As EventArgs) Handles MyBase.Load Ajax.Utility.RegisterTypeForAjax(GetType(Index)) '... end sub '... End Class |
//C# public class Index : System.Web.UI.Page{ private void Page_Load(object sender, EventArgs e){ Ajax.Utility.RegisterTypeForAjax(typeof(Index)); //... } //... } |
访问RegisterTypeForAjax要在页面里添加下述JavaScript代码(作为二者必须选择一个,所以你应当把以下两行代码都放到页面文件中去):
<script language="javascript" src="ajax/common.ashx"></script> <script language="javascript" |
粗体部分表示的意思如下:
NAMESPACE.PAGECLASS |
当前页面的名字空间和类名(这样将很形象地表示继承了在@Page中指定属性的值) |
ASSEMBLYNAME |
当前页面程序集的一部分(它将标识你的项目名称) |
下面是一个在AjaxPlay项目中sample.aspx输出的实例:
<%@ Page Inherits="AjaxPlay.Sample" Codebehind
|