播客 > 玩代码  >  ASP,ASP.NET(C#) AJAX 无刷新 二级联动   | 登录  | RSS订阅地址  | Code平台

ASP,ASP.NET(C#) AJAX 无刷新 二级联动

  这里先说asp的吧,然后再说C#与二级联动的,其实ajax调用的代码都是一样的。只是把发送request的文件.php改成.asp或者.aspx!

  在上篇的blog中,  PHP AJAX二级联动演示-城市地区  ,是PHP +AJAX的二级联动,我今天再把ASP和ajax联动二级菜单的也写出来,其实大体代码所差没什么。
  所使用的表的结构和MYSQL的结构一模一样,只是在access或者MSSQL中使用的话效果比较好一点。我这里就省略不说了。
  第一步:创建一个读取该数据库的asp文件,输出XML格式的数据:
  
<!--#include file="inc/conn.asp"-->
<!--#include file="inc/system31.asp"-->
<!--#include file="inc/system35.asp"-->
<%
Response.Clear()
Response.ContentType = "text/xml"
Response.ContentType = "application/xml"
Response.Charset ="utf-8"
response.write("<?xml version=""1.0"" encoding=""utf-8""?>")
response.write("<ClassLists>")
    arrs= GetRows("select [id],[name] from [citys] where [pid]=" & killint(request("id"),0,0,6))
    if isarray(arrs) Then
        Dim ai,arrmess
        arrmess=""
        for ai=0 to ubound(arrs,2)
                arrmess = arrmess &"<List><id>"&arrs(0,ai)&"</id><name><![CDATA["&trim(arrs(1,ai))&"]]></name></List>"
        Next
        response.write(arrmess)
    End if
response.write("</ClassLists>")
%>


 所使用的思路还是输出XML文件,输出的格式完全和上一讲一样:
<?xml version="1.0" encoding="utf-8"?><ClassLists><List><id>3</id><name>BEIJING</name></List><List><id>4</id><name>SHANGHAI</name></List></ClassLists>


第二步:创建需要使用联动的表单;
  第三步:使用javascript处理请求并表现给XML。


(与上一话完全一致,这里不再赘言)

  C#的读取数据列表显示为XML的代码为:
private void data_load(Object o,System.EventArgs e){
    this.Controls.Clear();
    string pidS=Request.QueryString["pid"];

    if(String.IsNullOrEmpty(pidS)) return;

    int pid=App.Cout.CInt(pidS);

    string sqlWhere = " [pid]=" + pid.ToString();
    IDataReader Idr =OTr.GetDataReader(sqlWhere,"[id],[name]");
    if(Idr==null) return;
    Response.ContentType = "text/xml";
    Response.Clear();
    Response.Charset ="utf-8";
    Response.BufferOutput = true;


    XmlTextWriter  writer = null;
    try{
        writer=new XmlTextWriter(Response.OutputStream,App.Settings.DefaultEncoding);//Response.ContentEncoding
        writer.Formatting =Formatting.Indented;
        writer.Indentation =0;
        writer.IndentChar ='\t';
        writer.WriteStartDocument();
            writer.WriteStartElement("ClassLists");
            writer.WriteComment("Dealsphere.com Update At " + System.DateTime.Now.ToString());
            while (Idr.Read()){
              writer.WriteStartElement("List");
              writer.WriteElementString("id",Idr[0].ToString());
              writer.WriteElementString("name",Idr[1].ToString());
              writer.WriteEndElement();
            }
            Idr.Close();
            writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Flush();

    }catch(Exception ex){
            throw new Exception(ex.Message);
    }finally{
            if(writer!=null) writer.Close();
    }
    Response.Flush();

}


  其中获取列表的OTr.GetDataReader方法的原型就是:

public IDataReader GetDataReader(string wherestr ,string cols ){
    return Cdb.Conn.GetDataReader(String.Format(Cdb.ObjSqlText.SelectFromWhere,String.IsNullOrEmpty(cols)?"*":cols,"dd_trade",(String.IsNullOrEmpty(wherestr)?"(1=1)":wherestr)+" order by trade_order desc"));
}

  已经说的够啰嗦了,不说了,有疑问的在群里面再谈谈吧。
天气:大雨,ccdot发表于2008-4-19 14:37:39,阅读了1228次,共有个0回复.

暂无评论

  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: