huanjian9999

强者总是寻找成功的机会,弱者寻找千条失败的理由.....
Ajax.NET专业版

      Ajax.NET专业版是一个针对.NET Framework的Ajax框架.使用开发人员能够在服务器端创建在客户端可以访问的类.它也抽象出客户端与服务器端之间的通信,提供了跨浏览器兼容的通信能力.
      这个框架使用了.NET版本的反射来分析类,创建相应的JavaScript接口.Ajax.NET专业版还得益于.NET中名为属性的功能,通过它可以使客户端能够使用类中特定的方法.这使开发人员全神贯注于面向对象设计,而不用担心将敏感的方法暴露给客户端.
1.引用AjaxPro.dll
2.编辑web.conf文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
      <system.web>
            <httpHandlers>
                  <add verb="POST,GET" path="ajax/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
            </httpHandlers>
      </system.web>
</configuration>
对于所有发向服务器的POST和GET请求,如果URL是指向ajaxpro目录并且最后的扩展名进.ashx的,那么将改用AjaxPro.AjaxHandlerFactory代替默认的处理器(对于其他发向服务器的请求没有任何影响).
3.标记方法
用AjaxPro.AjaxMethod特性标记出客户端可用的方法
namespace AjaxNET.Example{
      public class ExampleClass{
            [AjaxPro.AjaxMethod]
            public String GetMessage(){
                  return "Hello world!";
            }
      }
}
4.当客户端需要使用类的页面实例化时,必须标识出哪些类是客户端可以使用的,这就需要调用AjaxPro.Utility.RegisterTypeForAjax()方法,并传入要配置的类的类型.如:
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxNET.Example.ExampleClass));
注:这个函数的调用必须在ASP.NET的Page_Load方法中进行,以确保在调用该函数时类是可用的,并且引入了所必需的JavaScript资源,并确保在你的页面中至少有一个<form runat="server">元素,因为Ajax.NET专业版需要用它来插入JavaScript文件.
5.使用JavaScript封装器
      针对.NET类函数生成的JavaScript封装器,对对象中的每个方法都将成为JavaScript对应的表态方法.参数传递的方式和普通JavaScript函数调用相同,而最后一个参数是处理服务器响应的回调函数.
      在Ajax.NET专业版中,回调函数将把其收到的响应对象作为其唯一的参数.这个对象包括3个属性:error,如果出现通信错误,它会被设置为true;request,包含用来发出请求的XMLHttp对象;value,它的值是方法调用返回的结果.例:
function handleResponse(oResponse){
      if(!oResponse.error){
            alert(oResponse.value);
      }
}
AjaxNET.Example.ExampleClass.GetMessage(handleResponse);
注:同步调用时,不传入回调函数即可.(慎用)
6.类型转换
      默认情况下,Ajax.NET专业版将完成JavaScript数据类型及对象与.NET数据类型及对象之间的无疑转换.另外,它还针对.NET中诸如ADO.NET DataSet类的复杂类型提供了内建的支持.Ajax.NET专业版创建了相应的JavaScript对象定义.当它提供了一个这样的接口后,服务器端可用的属性和方法就都能够在客户端中使用了,唯一的区别在于它是完全只读的.
      它还可以向JavaScript返回一个自定义类.要实现这一操作,它必须使用Serializable属性标记,因而Ajax.NET专业版能够将其转成JSON格式.如:
[Serializable()]
public class User{
      private string _userName="";
      private string _userEmail="";
      public string UserName{
            get{return _userName;}
      }
      public string UserEmail{
            get{return _userEmail;}
      }
      public User(string Name,string Email){
            _userName=Name;_userEmail=Email;
      }
}
如果通过一个名为GetUserFromId()的方法返回一个User对象,则这些属性在JavaScript中就可以使用了,如:
MyClass.GetUserFromId(6,callback);
function callback(oResponse){
      var oUser=oResponse.value;
      alert(oUser.UserName+"\n"+oUser.UserEmail);
}
7.会话访问
      Ajax.NET专业版还能够访问会话作用域内的对象.要实现这一目标,只需要向AjaxPro.AjaxMethod()属性传一个参数,指定所需访问的级别即可.这个访问级别是由一个HttpSessionStateRequirement的枚举变量指定的,它包含三个值:Read,Write和ReadWrite.例:
[AjaxPro.AjaxMethod(HttpSessionStateRequirement.Read)]
public string MyMethod(){
      //更多代码
}
注:这段代码将MyMethod()方法设置为在客户端调用时,能够以只读权限访问会话作用域的变量.如果没有为AjaxPro.AjaxMethod()属性指定该参数,那么当使用JavaScript调用时就无法访问HttpContext.Current.Session.

附:实例

posted on 2009-05-23 13:04  huanjian9999  阅读(244)  评论(0)    收藏  举报