现在的位置: 首页 > 综合 > 正文

本人刚翻译完的ajax.net用户指南

2013年04月17日 ⁄ 综合 ⁄ 共 3749字 ⁄ 字号 评论关闭
 

Ajax.net用户指南

程守华

概述

AJAX依靠服务器作为中介来分发和处理请求。为了完成这项工作,.net封装类依赖于客户端的请求对象,而xmlHttpRequest对象被大部分的浏览器支持,因此使用这个对象是一个不错的解决方案。因为封装的目的是隐藏xmlHttpRequest的实现,故我们不讨论他的实现细节。

封装类是通过在.net的方法上增加AJAX属性标记来实现的,一旦被标记,AJAX创建客户端的javascript函数(这类似于客户端编写的javascript函数),并使用xmlhttprequest创建服务器代理,这个代理映射客户端的函数到服务器的处理函数。

复杂吗?不会的,让我们看看下面的简单例子,给出的.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会立即自动的创建带有两个参数、名字为Addjavascript函数,当客户端调用这个javascript函数时,请求将从后台送到服务器端并从将计算结果返回给客户端。

 

初始安装

我们首先从如何把”.dll”安装到你的项目开始,当然,如果你了解如何使用,这一节可以跳过。

如果你还没有Ajax.dll,可以首先下载AJAX的最新版本。解压文件放到可以被你的项目引用的地方,在.net项目中,添加上对其的引用,然后就可以开始使用ajax.dll封装进行开发了。

 


如果你在安装引用时遇到了麻烦,可以参考这个链接的说明:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskaddingremovingreferences.asp

 

设置HttpHandle

为了使其可以工作,第一步必须做的是在web.config中安装设置封装包的HttpHandle,不去详细解释HttpHandle是如何工作的,我们只需要了解他们可以用来处理asp.net请求。例如,所有的目的为*.aspx的请求可以通过System.Web.UI.PageHandlerFactory发送到控制句柄,简单的说,我们把任何向ajax/*.ashx的请求发送到Ajax.PageHandlerFactory的请求处理句柄:

<configuration>

  <system.web>

    <httpHandlers>

      <add verb="POST,GET" path="ajax/*.ashx"
          
type="Ajax.PageHandlerFactory, Ajax" />

    </httpHandlers> 

    ...

  <system.web>

</configuration>

上面的代码告诉asp.net把任何匹配到特定的路径(ajax/*.ashx)请求发送到Ajax.PageHandlerFactory产生的HttpHandle,而不再是默认的Handler factory。你不需要创建ajax子目录,这是一个只用来临时使用的虚拟的目录,因此别的HttpHandler可以用他们自己的目录来使用.ashx扩展名的文件。

 

配置页面

       现在我们准备好开始代码编写了。打开一个新的网页或者已经存在的页面,在其codebehind文件中的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代码(另外一种选择,你也可以人工在页面上添加如下的javascript代码)

<script language="javascript" src="ajax/common.ashx"></script>

<script language="javascript"
          
src="ajax/NAMESPACE.PAGECLASS,ASSEMBLYNAME.ashx"></script>

上面这段代码的粗体部分NAMESPACE.PAGECLASS,ASSEMBLYNAME含义如下

NAMESPACE.PAGECLASS

当前页面的命名空间和类

ASSEMBLYNAME

当前页面的程序集的名称

下面是在AjaxPlay项目中sample.aspx的示例输出:

<%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" ... %>

<html>

 <head>

  <script language="javascript" src="ajax/common.ashx"></script>

  <script language="javascript"
         
src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"></script>

 </head>

  <body>  

    <form id="Form1" method="post" runat="server">
      
...

    </form>

  </body>

</html>

你可以测试一下,人工通过浏览器将src path(通过查看源文件并copy)打开,一切都能正常的工作。如果输出了无意义的文本表示到目前为止是正确的,如果输出asp.net错误,则表示中间出现了错误。

       即使你不了解HttpHandle的工作方式,也应该可以理解上面的描述。通过web.config,我们可以确保发送向ajax/*.ashx的请求由我们自定义的句柄来处理,很显然,两个脚本标记由自定义句柄处理。

      

编写服务端函数

       现在我们编写服务器端函数,他们可以被客户端异步的调用。尽管现在还不能支持全部的返回类型,我们仍坚持服务器端添加功能。在codebehind文件的页面类里,添加下面的方法:

'VB.Net

<Ajax.AjaxMethod()> _

Public Function ServerSideAdd (byval firstNumber As Integer, byval secondNumber
                                                
As Integer) As Integer

 Return firstNumber + secondNumber

End Function

 

//C#

[Ajax.AjaxMethod()]

public int ServerSideAdd(int firstNumber, int secondNumber)

{

  return firstNumber + secondNumber;

}

注意,这个函数有Ajax.AjaxMethod()定制属性,属性服务会告知ajax封装类为此方法创建一个javascript代理,这样才能被客户端调用。

      

定制客户端调用

       接下来在客户端用javascript调用函数。Ajax封装类会创建一个javascript函数,带有两个参数,名字是 类名.ServerSideAdd。作为最基本的功能,我们所需要作的只是调用这个方法并且传递参数:

 

<%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" ... %>

<html>

 <head>

  <script language="javascript" src="ajax/common.ashx"></script>

  <script language="javascript"
         
src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"></script>

 </head>

  <body>  

    <form id="Form1<

抱歉!评论已关闭.