tempad
ReadyGo!技术成就梦想 >>Ajax教程 >> 轻松实现无刷新三级联动菜单[VS2005与AjaxPro]

轻松实现无刷新三级联动菜单[VS2005与AjaxPro]

ReadyGo!技术成就梦想 网络搜索 efish 2008-2-24 2:51:58

最近做一些网站程序,经常要用到多个下拉菜单选择,看了介绍开始用AjaxPro这个控件,感觉效果不错。以前使用过MagicAjax,很久不用了忘记了,最麻烦的就是在虚拟目录的时候比较麻烦,呵呵,在网上也有很多,不过重要的地方经常没提醒新手,俺也是菜鸟,高手请忽略。看到这个AjaxPro使用比较简单,这次使用的是6.x的,最新的是7.x的,觉得6.0系列的方便,就选它了。
在重要的地方都有提示了,相信很容易看懂。
      首先在web.config添加这个接点 在<system.web>与</system.web>之间,如下:
   <system.web>
    <!--for Ajaxnet-->
    <httpHandlers>
      <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
    </httpHandlers>
     <!--其他设置-->
   </system.web>
     然后把AjaxPro.2.dll丢到bin文件夹,然后引用它就可以了。
    还是发代码吧,麻烦死了下面代码是 Default.aspx.cs的


using System;
using System.Data;
using System.Configuration;
using System.Data.OleDb;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{  
   
    protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default)); //必要的
        if(!IsPostBack)BindDc();
    }

    /**//// <summary>
    /// 数据库连接 http://www.knowsky.com
    /// </summary>
    /// <returns></returns>
    public OleDbConnection myConn()
    {
        string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings);
        OleDbConnection conn = new OleDbConnection(ConnStr);
        try
        {
            conn.Open();
            return conn;
        }
        catch
        {
            throw;
        }
    }
   
    /**//// <summary>
    /// 获取下级分类
    /// </summary>
   
    public DataSet getNextClass(string cid)
    {
        //因为不希望页面可以知道字段名称 所以 as txt,id as vol 如果是sql ser 可以用 =
        //页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
        //所以二级分类没变化
        string sql = @"select cname as txt,id as vol from webclass where parentid=" + cid;
        try
        {
            return getDs(sql);
        }
        catch
        {
            //throw;
            return null;
        }
    }
   

    /**//// <summary>
    /// 返回一个DataSet
    /// </summary>
    /// <param name="SQL"></param>
    /// <returns></returns>
    public DataSet getDs(string SQL)
    {
        OleDbConnection conn = myConn();
        DataSet Ds = new DataSet();
        OleDbDataAdapter Da = new OleDbDataAdapter(SQL, conn);
        try
        {  
            Da.Fill(Ds);
            return Ds;
        }
        catch
        {
            return null;
            //throw;
        }

    }
    /**//// <summary>
    /// //数据绑定
    /// </summary>
    private void BindDc()
    {
        //第一个
        string sql = @"select * from webclass where Parentid=0";
        ddl1.DataSource = getDs(sql);
        ddl1.DataTextField = "cname";
        ddl1.DataValueField = "id";
        ddl1.DataBind();
        if (ddl1.DataSource != null) ddl1.Attributes.Add("onchange", "showNext(this.options.value,"ddl2");");

      
        //可以先判断 DropDownList.SelectedItem.Value
        //第二个
        sql = @"select * from webclass where parentid=" + ddl1.SelectedItem.Value;
        ddl2.DataSource = getDs(sql);
        ddl2.DataTextField = "cname";
        ddl2.DataValueField = "id";
        ddl2.DataBind();
       
        //第三个
        if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options.value,"ddl3");");
        sql = @"select * from webclass where parentid=" + ddl2.SelectedItem.Value;
        ddl3.DataSource = getDs(sql);
        ddl3.DataTextField = "cname";
        ddl3.DataValueField = "id";
        ddl3.DataBind();
   
    }
}

default.aspx内容:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>AjaxPro实现无刷新三级联动</title>
</head>
<script language="javascript" type="text/javascript">
      <!--
       // ACLOUD 常用JS函数
       function getBid(s){
          return document.getElementById(s);
        }
        function getBmc(s){
          return document.getElementByName(s);
        }
       
       //显示分类列表
       function showNext(sid,obj)
        {
          if(sid==null || sid=="" || sid.length<1)return;
          var slt =getBid(obj);
          var v = _Default.getNextClass(sid).value; // 类的名称
          //alert(v);
          //return;
          if (v != null){     
          if(v != null && typeof(v) == "object" && v.Tables != null)
                    {       
                        slt.length = 0;
                        slt.options.add(new Option("请选择",0));
                        //加了个“请选择”主要为了触发onchange事件
                        if(obj=="ddl2"){
                        getBid("ddl3").options.length=0;
                        getBid("ddl3").options.add(new Option("请选择",0));
                        }           
                        for(var i=0; i<v.Tables.Rows.length; i++)
                    {
                        var txt = v.Tables.Rows.txt; //这个地方需要注意区分大小写
                      var vol = v.Tables.Rows.vol; //跟dataset表的列名称要一致
                      slt.options.add(new Option(txt,vol));
                    }
                    }
           }   
           return;
        }
        -->
</script>
<body>
    <form id="form1" runat="server">
    <div>
      <table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td width="99"> </td>
          <td width="401">
              城市<asp:DropDownList ID="ddl1" runat="server">
              </asp:DropDownList>
              区域<asp:DropDownList ID="ddl2" runat="server">
              </asp:DropDownList>
              花园<asp:DropDownList ID="ddl3" runat="server">
              </asp:DropDownList></td>
        </tr>
        <tr>
          <td> </td>
          <td> </td>
        </tr>
        <tr>
          <td> </td>
          <td> </td>
        </tr>
      </table>
   
    </div>
    </form>
</body>
</html>
相关文件
http://www.cnblogs.com/Files/asboy/AjaxDropDownlist.rar
代码文件于2005-5-13更新过 列出了取值的方法

责任编辑: efish 参与评论 查找更多:
相关文章
基于ASP.NET AJAX的WebPart开发与部署 基于ASP.NET AJAX的WebPart开发与部署
ASP.NET AJAX 客户端生命周期事件 ASP.NET AJAX 客户端生命周期事件
使用AjaxPro开发四级无刷新联动下拉框 使用AjaxPro开发四级无刷新联动下拉框
微软Asp.net Ajax 1.0的AutoComplete控件的几处修正… 微软Asp.net Ajax 1.0的AutoComplete控件的几处修正和增强
Ajax实现分页查询 Ajax实现分页查询
Ajax实现不刷屏的前提下实现页面定时刷新 Ajax实现不刷屏的前提下实现页面定时刷新
利用JQuery方便实现基于Ajax的数据查询、排序和分页… 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
利用MS AJAX 扩展服务器端控件 利用MS AJAX 扩展服务器端控件
Ajax核心:XMLHTTP组件相关技术资料 Ajax核心:XMLHTTP组件相关技术资料
ajax与spring结合 ajax与spring结合
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想