c#.net下简单的Ajax例子

  

    昨天调试这个例子时,问我们公司的一个大牛,关于js底层原生函数用法的问题,他说不知道,建议我去网上找一个小框架,看来 “不重复造轮子的想法已经深入人心。而这个建议显然背离我写这个demo原本的意愿。当然,后来google到了答案。

    可能.net程序员手写方法的时候很少,在初学时,就被前辈灌输使用框架!用系统自带方法!这个概念,直接导致我们某方面相对孱弱。这也是为什么,用javaAjax例子信手拈来,而用C#写,却困难重重——网上很难找到不用Ajax.dll实现的例子。好了,闲话不说了,进入主题:

    我们需要两个页面a.aspxb.aspxa页面代码如下(就用最常见的,两个下拉列表连动的例子):

  

< body >
    
< form  id ="Form1"  method ="post"  runat ="server" >
    
< select  id ="AList"  onchange ="SetBList()" >
        
< option  value ="0" > A </ option >
        
< option  value ="1" > B </ option >
        
< option  value ="3" > C </ option >
    
</ select >
    
< select  id ="BList" ></ select >
     
</ form >
  
</ body >

 

 

a页面触发onchange事件后,我们进入写在a页面的SetBList()方法中,这里将完整的js列出来:

 

< script language = " javascript " >
var  xmlHttp;

function  SetBList() ...{
    
var  avalue  =  document.getElementById( " AList " ).value;

    
var  url  =   " b.aspx?Avalue= "   +  avalue;
    createXMLHttpRequest();  
//  创建xmlHttp对象
    xmlHttp.onreadystatechange  =  handleStateChange;   //  当xmlHttp状态码发生改变时,调用handleStateChage方法
    xmlHttp.open( " GET " , url,  true );    //  GET方法发送请求
    xmlHttp.send( null );
}

function  BListInitial() ...{
    
//  先清空一下BList的option
    clearBList();

    
var  blist  =  document.getElementById( " BList " );   //  获取BList对象
     var  rs  =  xmlHttp.responseXML.getElementsByTagName( " City " );   //  从返回xml文档中,读取<City>标签的数据
     //  这个循环取值的地方,卡了我一会,将xmlHttp.responseXML创建成一个xml文档,然后找读文档的方法,但问题是不同浏览器创建xml文档的方法不一样
     for ( var  i = 0 ;i < rs.length;i ++ ) {
        
var  option  =  document.createElement( " OPTION " );
        option.text 
=  rs[i].getElementsByTagName( " CityName " );
        option.value 
=  rs[i].getElementsByTagName( " CityCode " );
        blist.options.add(option);
    }
}

function  clearBList() ...{
    
var  ven  =  document.getElementById( " VendorList " );
    
while (ven.options.length  >   0 )
        ven.removeChild(ven.childNodes[
0 ]);
}

function  handleStateChange() ...{
    
if (xmlHttp.readyState  ==   4 ) ...{
        
if (xmlHttp.status  ==   200 ) ...{
            BListInitial();
        }
    }
}

function  createXMLHttpRequest() ...{
    
//  IE
     if  (window.ActiveXObject) ...{
        xmlHttp 
=   new  ActiveXObject( " Microsoft.XMLHTTP " );
    } 
    
//  Mozilla
     else   if  (window.XMLHttpRequest) ...{
        xmlHttp 
=   new  XMLHttpRequest();
    }
}
</ script >
 



 

 b.aspx页面将html部分全部删除,仅仅留一行:

 

<% @ Page language = " c# "  Codebehind = " b.aspx.cs "  AutoEventWireup = " false "  Inherites = " Test.Ajax "   %>

  

原因是我们a页面要求返回的xml文档,因此,我们将Html标签部分删除。然后在b页面的Page_Load方法中,对数据库进行操作,然后数据写成xml的格式,例如:

 

//  ......    
//  数据库操作,得到DataTable dt

string  xml  =   " <Data> " ;
foreach (DataRow row  in  dt.Rows)  {
    xml 
+=   " <City> " ;
    xml 
+=   " <CityName> "   +  row[ " CityName " +   " </CityName> " ;
    xml 
+=   " <CityCode> "   +  row[ " CityCode " +   " </CityCode> " ;
    xml 
+=   " </City> " ;
}
xml 
+=   " </Data> " ;

//   清页面格式,写xml
Response.ClearContent();
Response.Cache.SetNoStore();
Response.ContentType 
=   " text/xml " ;
Response.ContentEncoding 
=  System.Text.Encoding.UTF8;
Response.Write(xml);

 

在整体运行之前可以先将b页面测试一下,如果得到类似如下结果,则说明,数据部分是没问题的。 

< Data >
    - 
< Vendor >
        
< VendorId > 7 </ VendorId >  
       
< VendorName > 千千 </ VendorName >  
   
</ Vendor >
</ Data >

 

 到此,这个例子基本结束了,有问题,请在评论区留言。 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值