ASP.NET Ajax之Page Methods

实现Ajax的途径很多,作为一个ASP.NET程序员,如果对ASP.NET Ajax基础知识不了解似乎就说不过去了。本文讲述Page Methods的使用。

既然是ASP.NET Ajax,首先需要在页面上添加一个ScriptManager并且设置EnablePageMethods="true"。然后后台代码添加using System.Web,Services;

然后开始编写后台方法,此时你需要注意:

将该方法声明为public; 

将该方法声明为static; 

为该方法添加[WebMethod]属性; 

之后就是前台页面调用,步骤如下:

在客户端使用如下JavaScript语法调用该页面方法:

      PageMethods.MethodName(param1, param2,..., callbackFunction);

      function callbackFunction(params){//do something here...;}

注意,PageMethods是不会有智能感知的,所以不要怀疑是自己写错了。

为客户端异步调用指定回调函数,在回调函数中接收返回值并进一步处理 。

下面给出一个简单的两级联动的示例:

后台方法:

 

ExpandedBlockStart.gif 代码
    [WebMethod]
    
public   static   string  GetCountries()
    {
        
// 实际应用中需要一个JSON解析器,将你数据库中的DataTable或者List<Entity>转化为JSON字符串。
         
// 我这里示范传统的切割字符串(先用逗号切为数组,再用冒号切为Text和Value)
         return   " China:86,America:1,England:44,France:33 " ;
    }

    [WebMethod]
    
public   static   string  GetCities( string  countryid)
    {
       
// 模拟根据国家编号查询城市的数据库查询操作,返回JSON
         if  (countryid  ==   " 86 " )
            
return   " [{city:'Beijing',no:'010'},{city:'Wuhan',no:'027'},{city:'Shanghai',no:'020'}] " ;
        
if  (countryid  ==   " 1 " )
            
return   " [{city:'New York',no:'010'},{city:'LA',no:'027'},{city:'Houston',no:'020'}] " ;
        
if  (countryid  ==   " 44 " )
            
return   " [{city:'London',no:'010'},{city:'Manc',no:'027'}] " ;
        
if  (countryid  ==   " 33 " )
            
return   " [{city:'Paris',no:'010'}] " ;
        
return   "" ;
    }
前台调用:
ExpandedBlockStart.gif 代码
     < script language = " javascript "  type = " text/javascript " >
        
function  getCountries() {
// GetCountries是后台方法名字,大小写不要错了。如果有参数,就把参数依次写在回调函数的前面;若没有则可不管
            PageMethods.GetCountries(loadCountries);}
// result是页面后台方法返回的字符串,后面2个参数暂时未用到
         function  loadCountries(result, userContext, methodName) {
            
var  ddl1  =  document.getElementById( " ddl1 " );
            
var  ary  =  result.toString().split( " , " );
            
for  ( var  i  =   0 ; i  <  ary.length; i ++ ) {
                
var  item  =  ary[i].split( " : " );
                
var  opt  =   new  Option(item[ 0 ], item[ 1 ],  false false );
                ddl1.options[ddl1.options.length] 
=  opt;}}
// 根据国家选择城市
             function  getCities(obj) {
                
if  (obj.selectedIndex  !=   0 ) {
                    
var  cid  =  obj.options[obj.selectedIndex].value;
                    PageMethods.GetCities(cid, loadCities);}
                
else  {
                    
var  ddl2  =  document.getElementById( " ddl2 " );
                    ddl2.options.length 
=   0 ;
                    
var  opt  =   new  Option( " --Choose Your City-- " "" false false );
                    ddl2.options[ddl2.options.length] 
=  opt;}}
        
function  loadCities(result, userContext, methodName) {
            
var  ddl2  =  document.getElementById( " ddl2 " );
            ddl2.options.length 
=   0 ;
            
var  json  =  eval( " ( "   +  result  +   " ) " );
            
for  ( var  i  =   0 ; i  <  json.length; i ++ ) {
                
var  opt  =   new  Option(json[i].city, json[i].no,  false false );
                ddl2.options[ddl2.options.length] 
=  opt;}}
    
< / script>

 

这样的话实现一个三级联动也很简单,不过就是不知道效率如何。

补充说明:如果在Page Method里面需要调用页面的其他方法,那么这个方法和它一样必须设置为static。如果是调用其他dll的方法就没有这个限制。

/Files/1000/jscallserver.rar

转载于:https://www.cnblogs.com/1000/archive/2010/02/04/ASP-NET-Ajax-Page-Methods.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值