怎么实现无页面刷新的省市级联,不用xml的,我的地区数据需要从数据库中读取,高手帮忙看下我有后台代码,前台代码不知道该怎么写,高手帮帮忙!

解决方案 »

  1.   

        private AdministrativeDivisionBLL _AdministrativeDivisionBll;    private AdministrativeDivisionBLL AdministrativeDivisionBll
        {
            get
            {
                if (_AdministrativeDivisionBll == null)
                {
                    _AdministrativeDivisionBll = new AdministrativeDivisionBLL();
                }
                return _AdministrativeDivisionBll;
            }
        }    //protected System.Web.UI.WebControls.DropDownList DropDownList1;
        //protected System.Web.UI.WebControls.DropDownList DropDownList2;
        //protected System.Web.UI.WebControls.TextBox TextBox1;
        //protected System.Web.UI.WebControls.DropDownList DropDownList3;    protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!IsPostBack) 
            {
                this.DropDownList1.DataSource = this.AdministrativeDivisionBll.GetByAdministrativeLevel(1);
                this.DropDownList1.DataTextField = "Name";
                this.DropDownList1.DataValueField = "Id";
                this.DropDownList1.DataBind();            this.DropDownList1.Attributes.Add("onclick", "cityResult();");
                //this.DropDownList2.Attributes.Add("onclick", "areaResult();");
            }     }    private void cityResult()
        {
            this.DropDownList2.DataSource = this.AdministrativeDivisionBll.GetByParent(Convert.ToInt32(this.DropDownList1.SelectedValue));
            this.DropDownList2.DataTextField = "Name";
            this.DropDownList2.DataValueField = "Id";
            this.DropDownList2.DataBind();
        }
      

  2.   

    微软的ajax控件  用过吧
      

  3.   

    别给我个网址让我自己看,看不明白,看了两天了。看了各种版本的,什么js的什么xml的,还有什么其他的乱七八糟的,高手帮帮忙。
      

  4.   

    拖一个 updatepanel 容器
    把DropDownList控件都放在这个容器里就可以了
      

  5.   

    说不定结构也不一样呢?没法给你
    总之就是updatepanel
      

  6.   

    Vs2008自带的ajax控件,先拖个ScriptManager在form里,然后在你需要无刷新的地方套上UpdatePanel就行了,这个找个asp.net的ajax看看就成了!
      

  7.   

     DropDownList1 都是有刷新的,,JS才是无刷新.. 关于省市联动 你可以google一下 ,大把的例子给你抄..
      

  8.   

    拖一个 updatepanel 容器
    把DropDownList控件都放在这个容器里就可以了你先看看网上的级联是怎么做的 然后改成Ajax版本的
      

  9.   

    ajax 的控件拖到vs中,然后里面有个工具叫updatepanel,直接用它就行,如果没有ajax控件,我给你...
      

  10.   

    用ajax啊... select控件 onchange的时候 用ajax post或者 get到指定页面。查询数据库,得到数据比如 List<Province> pro ,在  foreach 遍历,然后按照json格式用 StringBuilder去Append 你的 value 和 text比如:
    StringBuilder1.Append(",{");
    StringBuilder1.AppendFormat("value:'{0}',text:'{1}'", pro.ID, pro.Name).ToString();
    builder.Append("}");最后 context.Response.Write(StringBuilder1.ToString()); 返回!
      

  11.   

    用updatepanel或者ajax实现联动!
      

  12.   

    前台还用问...------------------------------随手写一个...function LoadProvinceData() {    $("#ddlProvince").empty();
        $.getJSON("../ajax/GetJsonData.ashx", { type: "province" }, function(provinces) {
            $.each(provinces.data, function(i, pro) {
                var item = new Option(pro.text, pro.value);
                $("#ddlProvince")[0].options.add(item)
            })
        });}---------------------
    后台 string type = context.Request.QueryString["type"];记住 不要用服务器控件,用select 足够了。 
      

  13.   

    sorry,刚才去开会了,我用的vs2010
      

  14.   

    你vs有“工具箱”这个视图吧,有个文件AjaxControlToolkit.dll把这个控件放到工具箱后就有跟lable类似的控件,里面有个updatepanel ,然后直接用就行...
      

  15.   

    不对,应该是装了ajax后就有updatepanel ...呵呵!!
      

  16.   

    ScriptManager 是不是必须得有这个东西啊??还有我做的页面母版页有一个ScriptManager ,我这个页面就不能加了啊?只能加一个啊?
    可是我不加有提示什么ScriptManager 必须在updatepanel前,我都晕了
      

  17.   

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                                <ContentTemplate>
                                <asp:DropDownList ID="ddlProvinceList" runat="server" onselectedindexchanged="ddlProvinceList_SelectedIndexChanged" AutoPostBack="True" />
                                <asp:DropDownList ID="ddlCityList" runat="server" /><asp:CheckBox ID="chkSetLevel" runat="server" AutoPostBack="True" Text="不选城市" oncheckedchanged="chkSetLevel_CheckedChanged" />
                                </ContentTemplate>
                                </asp:UpdatePanel>这么着对吗?
      

  18.   

    只在我原来的这两个DropDownList外加个这个东西什么都不用动了就能无刷新级联吗?
      

  19.   

    只要一个就行了,如果都应用模板页,就把ScriptManager 放到模板页,
      

  20.   

    把原来的两个下拉列表放到  UpdatePanel1就行了...试试看                                                         
      

  21.   

    我日.net就是被服务器控件给毁了。
      

  22.   

    你还要看看你当时建项目时候建的是不是ajax的项目,如果不是要把Web.config改改,不然会报网页错误“sys”什么东西错误...
    办法是自己重新建一个ajax项目,然后把Web.config复制,然后粘贴到你原来的项目,呵呵!!
      

  23.   

    直接有ajax就好了啊,只是易出现乱码
      

  24.   


    function FillDropListByDataTable(response,dt)
    {
        if (response != null)
        {                    
            document.getElementById(dt).length=0;
            document.getElementById(dt).disabled="";
            var ds = response;
            if(ds != null && typeof(ds) == "object" && ds.Tables != null)
            {    
                var rowsCount= ds.Tables[0].Rows.length;
                if (rowsCount>0) {
                    document.getElementById(dt).options.add(new Option("请选择","0"));
                    for(var i=0; i<rowsCount; i++)
                    {
                        var name=ds.Tables[0].Rows[i]["ListName"];
                        var id=ds.Tables[0].Rows[i]["ListId"];
                        document.getElementById(dt).options.add(new Option(name,id));
                    }
                }
                else{
                        var name="无可选项";
                        var id="-1";
                        document.getElementById(dt).options.add(new Option(name,id));
                        document.getElementById(dt).disabled="disabled";
                }           
                
            }
        }
        else
        {
           alert("传入的值为null");
        }
        return
    }
      

  25.   

    updatepanel或者使用 ajax pro
      

  26.   

    把updatepanel放到模板页了,可是又出了这个错,是怎么回事?The control with ID 'UpdatePanel1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.
      

  27.   

    前台jscript这个写,那后台怎么弄,像我那样是不是还缺点什么东西?
      

  28.   

    <form ...属性>
    <ScriptManager..属性></ScriptManager> 
    <div>你的DropDownList</div>
    </form>
    定义下拉改变事件,写代码
      

  29.   

    lz的偶不会 偶只做过ajax跟extjs的
      

  30.   

    还是用JScript吧,这个看着还有点明白,不过不知道该怎么用35楼写的那个在哪里用啊??是不是后台还要加点东西?
      

  31.   

    楼主这问题,网上有很多例子都能用的,你先确定你是要用 asp.net ajax 还是用 第三方组件的,比如ajaxpro,或者自己写个ajax脚本啥的。
      

  32.   

    基于jquery的ajax二级联动
      

  33.   

    要用.net的,因为我是刚来的头让我做啥我就做啥,现在数据时从数据库读的,后台代码上面写了,然后前台该怎么帮我不知道,建的不是Ajax项目,也不能改成Ajax项目,因为我不敢随便改项目,只能这样,我接下来该怎么弄?
      

  34.   

    jQuery的肯定用不了,因为那个我一点也不会
      

  35.   

    拖一个AJAX控件UpdatePanel就搞定了  这是简单的方法
    复杂点的用 JQUERY
      

  36.   

    asp.net提供了一个很好的局部刷新控件, UpdatePanel
    给你一个简单的例子<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
      <ContentTemplate>
          <asp:DropDownList ID="DDprovince" runat="server" CssClass="btstyle" DataTextField="cityname" DataValueField="cityid" OnSelectedIndexChanged="DDprovince_Click" AutoPostBack="true">
          </asp:DropDownList>
      </ContentTemplate>
    </asp:UpdatePanel>
    <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
        <ContentTemplate>                            
            <asp:DropDownList ID="DDcity" runat="server" CssClass="btstyle" DataTextField="cityname" DataValueField="cityid">
            <asp:ListItem Text="请选择" Value="0" Selected="True"></asp:ListItem>
            </asp:DropDownList>
        </ContentTemplate>
    </asp:UpdatePanel>这是前台的代码,后台没啥要求,希望对楼主有用
      

  37.   


    果然火了,网上课堂了。别人讲的再详细也要动手动脑的。你有两天思考的基础。
    楼主好像是IDE基础不太好。别着急方法是对的慢慢调,别乱跑。
      

  38.   

    我只会一个比较笨的方法。。
     private void Bind()
      {
      //这里先获取所有省的信息
      DataSet ds = bll.getUnitid();
      //调用创建方法创建TreeView的根节点
      CreateTreeView(TreeView1.Nodes, ds);  }
      private void CreateTreeView(TreeNodeCollection nodes, DataSet ds)
      {
      //从Dataset中筛选符合条件的行的集合
      DataRow[] drr = ds.Tables[0].Select();  //遍历获得行的集合
      foreach (DataRow dr in drr)
      {
      //创建TreeView节点
      TreeNode tnode = new TreeNode();
      //添加到根节点中
      nodes.Add(tnode);
      //设置显示的文本
      //tnode.ImageUrl = "images/foldericon1.gif";
      tnode.Text = dr["unit"].ToString();
      tnode.Value = dr["id"].ToString();
      //设置显示的路径
      // tnode.NavigateUrl = dr["PurURL"].ToString();  //本来是递归调用方法,不过由于你的数据不是由一个字段来区分级数,所以得重新查询市的所有信息
      // CreateTreeView(tnode.ChildNodes, ds);
      DataSet ds1 = bll.getdepartment();
      CreateTreeViewCnode(tnode.ChildNodes, ds1, dr["id"].ToString());
      //从Dataset中删除已经添加的行,提高访问效率
      ds.Tables[0].Rows.Remove(dr);  }  }
      private void CreateTreeViewCnode(TreeNodeCollection nodes, DataSet ds, string unitid)
      {
      //定义筛选条件
      string sql = string.Format("unit_id={0}", unitid);
      //从Dataset中筛选符合条件的行的集合
      DataRow[] drr = ds.Tables[0].Select(sql);  //遍历获得行的集合
      foreach (DataRow dr in drr)
      {
      //创建TreeView节点
      TreeNode tnode = new TreeNode();
      //添加到根节点中
      nodes.Add(tnode);
      //设置显示的文本
      //tnode.ImageUrl = "images/foldericon1.gif";
      tnode.Text = dr["depart"].ToString();
      tnode.Value = dr["id"].ToString();
      //设置显示的路径
      // tnode.NavigateUrl = dr["PurURL"].ToString();
      //递归调用方法
      DataSet ds1 = bll.getFirstdate();
      CreateTreeViewCnodePolicedate(tnode.ChildNodes, ds1, dr["id"].ToString());
      //从Dataset中删除已经添加的行,提高访问效率
      ds.Tables[0].Rows.Remove(dr);
      }  }
      private void CreateTreeViewCnodePolicedate(TreeNodeCollection nodes, DataSet ds, string departid)
      {
      //定义筛选条件
      string sql = string.Format("depart_id='{0}'", departid);
      //从Dataset中筛选符合条件的行的集合
      DataRow[] drr = ds.Tables[0].Select(sql);  //遍历获得行的集合
      foreach (DataRow dr in drr)
      {
      //创建TreeView节点
      TreeNode tnode = new TreeNode();
      //添加到根节点中
      nodes.Add(tnode);
      //设置显示的文本
      //tnode.ImageUrl = "images/foldericon1.gif";
      string firstTime = Convert.ToDateTime(dr["firstdate"]).Year.ToString();
      tnode.Text = firstTime + "着装";
      tnode.Value = dr["firstdate"].ToString();
      //设置显示的路径
      // tnode.NavigateUrl = dr["PurURL"].ToString();
      DataSet ds1 = bll.getPoliceinfo();
      CreateTreeViewCnodePolice(tnode.ChildNodes, ds1, dr["firstdate"].ToString());
      //从Dataset中删除已经添加的行,提高访问效率
      ds.Tables[0].Rows.Remove(dr);
      }  }
      private void CreateTreeViewCnodePolice(TreeNodeCollection nodes, DataSet ds, string firstdate)
      {
      //定义筛选条件
      string sql = string.Format("firstdate='{0}'", firstdate);
      //从Dataset中筛选符合条件的行的集合
      DataRow[] drr = ds.Tables[0].Select(sql);  //遍历获得行的集合
      foreach (DataRow dr in drr)
      {
      //创建TreeView节点
      TreeNode tnode = new TreeNode();
      //添加到根节点中
      nodes.Add(tnode);
      //设置显示的文本
      //tnode.ImageUrl = "images/foldericon1.gif";
      tnode.Text = dr["name"].ToString();
      tnode.Value = dr["police_id"].ToString();
      //设置显示的路径
      // tnode.NavigateUrl = dr["PurURL"].ToString();
      //递归调用方法  //从Dataset中删除已经添加的行,提高访问效率
      ds.Tables[0].Rows.Remove(dr);
      }  }
      

  39.   

    自己下个AjaxPro.2控件 或者 VS自带的UpdatePanel的例子 稍微研究下就搞定了的
      

  40.   

    没搞定,杀生丸,那个我知道,可是用不了ScriptManager 这里总报错,因为模板页里有个ScriptManager ,所以这个也就不能在这个页面再加ScriptManager ,可是这个页面不加又报错The control with ID 'UpdatePanel1' requires a ScriptManager on the page. The ScriptManager must appear before any controls that need it.
    加了又报ScriptManager 只能用一个的错,我要死了
      

  41.   


    首先问你是一个表还是分开的表 我那天
    /// <summary>   
    /// 页面加载   
    /// </summary>   
    /// <param name="sender"></param>   
    /// <param name="e"></param>   
    protected void Page_Load(object sender, EventArgs e)   
    {   
        //加载页面时,动态读取国家列表到DropList   
        CreateTree();   
    }   
      
    ///   <summary>      
    ///   绑定生成一个有树结构的下拉菜单      
    ///   </summary>      
    ///   <param   name="dtNodeSets">菜单记录数据所在的表</param>      
    ///   <param   name="strParentColumn">表中用于标记父记录的字段</param>      
    ///   <param   name="strRootValue">第一层记录的父记录值(通常设计为0或者-1或者Null)用来表示没有父记录</param>      
    ///   <param   name="strIndexColumn">索引字段,也就是放在DropDownList的Value里面的字段</param>      
    ///   <param   name="strTextColumn">显示文本字段,也就是放在DropDownList的Text里面的字段</param>      
    ///   <param   name="drpBind">需要绑定的DropDownList</param>      
    ///   <param   name="i">用来控制缩入量的值,请输入-1</param>      
    private void MakeTree(DataTable dtNodeSets, string strParentColumn, string strRootValue, string strIndexColumn, string strTextColumn, DropDownList drpBind, int i)   
    {   
        //每向下一层,多一个缩入单位      
        i++;   
      
        DataView dvNodeSets = new DataView(dtNodeSets);   
        dvNodeSets.RowFilter = strParentColumn + "=" + strRootValue;   
      
        string strPading = "";     //缩入字符     
      
        //通过i来控制缩入字符的长度,我这里设定的是一个全角的空格      
        for (int j = 0; j < i; j++)   
            strPading += " ";//如果要增加缩入的长度,改成两个全角的空格就可以了     
      
        foreach (DataRowView drv in dvNodeSets)   
        {   
            TreeNode tnNode = new TreeNode();   
            ListItem li = new ListItem(strPading + "├" + drv[strTextColumn].ToString(), drv[strIndexColumn].ToString());   
            drpBind.Items.Add(li);   
            MakeTree(dtNodeSets, strParentColumn, drv[strIndexColumn].ToString(), strIndexColumn, strTextColumn, drpBind, i);   
        }   
      
        //递归结束,要回到上一层,所以缩入量减少一个单位      
        i--;   
    }   
      
    /// <summary>   
    /// SQL语句查询,再绑定到DropList里面   
    /// </summary>   
    private void CreateTree()   
    {   
        //查询ZoneList   
        string sql = "SELECT *FROM Zone";   
        DataTable dt= DataAccess.GetDataSet(sql);   
      
        MakeTree(dt, "parentid", "0", "zone_id", "zonename_en", zone_id, -1);   
    }  别人告诉我一个方法!他们教我的!我也不会!今天 给你看看!
      

  42.   

    一个页面里只能有一个ScriptManager
    如果模板页里有,把这个删掉就行了,或者把模板页里的删掉,每个页面里都加一个ScriptManager
      

  43.   


    这是我自己能的!这是3个表 省 市  区  还有一个合作公司  collaborteProvince省份表
    Id name ShenNo 
    城市表 City Cid name ShiNo Pid
    市区表  AreaAId AName QuNo  
        /// <summary>
        /// 绑定省市区三级TreeView
        /// </summary>
        /// <param name="StrSql"></param>
        private void treebing()
        {
            DataTable dt = ProvinceManager.GetDataSetProvinceAlls("");
            foreach (DataRow dr in dt.Rows)
            {            //查询省份合作的家数
                if (CollaborateManager.GetProvinceByCount(Convert.ToInt32(dr["PId"])) != 0)
                {
                    TreeNode no = new TreeNode(dr["name"].ToString() + " (" + CollaborateManager.GetProvinceByCount(Convert.ToInt32(dr["PId"])) + "家)");
                    //Response.Write(da.Rows.Count);
                    ViewState["Pid"] = dr["PId"].ToString();//保存Pid
                    no.NavigateUrl = "Works.aspx?PId=" + dr["PId"].ToString();
                    TvProvince.Nodes.Add(no);//绑定省
                    no.SelectAction = TreeNodeSelectAction.Expand;
                    DataTable dt1 = CityManager.GetDataSetCityById(int.Parse(dr["Pid"].ToString()));
                    foreach (DataRow dr1 in dt1.Rows)
                    {
                        //查询城市合作的家数
                        if (CollaborateManager.GetCityByCount(Convert.ToInt32(dr1["CId"])) != 0)
                        {
                            TreeNode no1 = new TreeNode(dr1["name"].ToString() + " (" + CollaborateManager.GetCityByCount(Convert.ToInt32(dr1["CId"])) + "家)");                        ViewState["CId"] = dr1["CId"].ToString();//保存Pid
                            no1.NavigateUrl = "Works.aspx?CId=" + dr1["CId"].ToString();
                            no.ChildNodes.Add(no1);//绑定城
                            no1.SelectAction = TreeNodeSelectAction.Expand;                        DataTable dt2 = AreaManager.GetDatSetAreaById(int.Parse(dr1["CId"].ToString()));
                            foreach (DataRow dr2 in dt2.Rows)
                            {
                                if (CollaborateManager.GetAreaByCount(Convert.ToInt32(dr2["AId"])) != 0)
                                {
                                    TreeNode no2 = new TreeNode(dr2["Aname"].ToString() + "(" + CollaborateManager.GetAreaByCount(Convert.ToInt32(dr2["AId"])) + "家)");
                                    no2.SelectAction = TreeNodeSelectAction.Expand;
                                    ViewState["AId"] = dr2["AId"].ToString();//保存Pid
                                    no2.NavigateUrl = "Works.aspx?AId=" + dr2["AId"].ToString();
                                    no1.ChildNodes.Add(no2);//绑定区
                                }
                            }
                        }
                    }
                }
            }
            TvProvince.CollapseAll();
        }
      

  44.   

    谨供参考:
    省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例 
    http://blog.csdn.net/downmoon/archive/2010/06/15/5672563.aspx
      

  45.   

    果断留名
    先用updatepanle解决吧
    然后在学着用ajax来做,用js,不会jQuery也行
      

  46.   

    http://www.cnblogs.com/wcp066/archive/2008/06/11/948921.html  用ajaxpro吧,这个很详细
      

  47.   

    我说下我的方法 详细点说
    1、到CSDN下个AjaxPro.2控件 放在你web的BIN目录下,添加引用
    2、把这段代码加在web.config的system.web节点下
       <httpHandlers>
          <add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
      </httpHandlers>
    3、在你的后台文件中Page_Load方法中加入:AjaxPro.Utility.RegisterTypeForAjax(typeof(DropDownList));  DropDownList为你的页面的类名//注册AjaxPro控件
    4、在你的第一个DropDownList绑定数据源事件中,当绑定数据源后(因为我们要获取第一个DropDownList的值传给第二个DropDownList)所以加上JS事件:
        string basePartId = Dad2.SelectedValue;//获取第一个DropDownList的选中的值
        if (basePartId != "")
          {
              Dad2.Attributes.Add("onchange", "showNext('Dad2','Son2')");}
              //Dad2-第一个DropDownList的ID,Son2-第二个DropDownList的ID,showNext()前台JS函数即无刷新绑定DropDownList的函数.
    5、给获取第二个DropDownList的数据集的方法标上[AjaxPro.AjaxMethod]//表示可以在前台调用后台的方法。eg:
        [AjaxPro.AjaxMethod]
        public IList<SonpartInfo> BindSon(string basePartId)  //我用的是IList<>
        {//这里为你通过传参数,返回得到第二个DropDownList的数据集的代码}
    6、前台JS代码:给你代码范例
        eg:
           function showNext(sid1,sid2)
    {
        var sid1=document.getElementById(sid1).value;  //获取第一个DropDownList的值,等下传给后台函数IList<SonpartInfo> BindSon(string basePartId)
        var son=document.getElementById(sid2);
        var val=DropDownList.BindSon(sid1).value;//调用后台函数 获取第二个DropDownList的数据集
        if(val != null && typeof(val) == "object") //判断是否有数据
        {   
            var valSum = val.length;                               
            for(var i=0; i<valSum; i++)
        {
            var addoption=document.createElement("option");   
                    addoption.text =val[i].Sonpartname; //SonpartInfo实体类的属性   
                    addoption.value =val[i].Idx;        //SonpartInfo实体类的属性
                document.getElementById("Son2").add(addoption);   
        }
      }
    }
    思路就是如上 你自己动手看下。
        
        
      

  48.   

    希望楼主尽快搞定
    我现在也正在做一些基础的东西的整合
    不过我的现在的框架是模仿petshop4.0的框架 看起来比较麻烦
    如果楼主不闲看起来麻烦的话 我给你我的源码。
      

  49.   

    在这个页先注册一个ScriptManager,如果用的母版页那么现在母版页注册一个ScriptManager就行了。
      

  50.   

    这种ajax方法是可行的。
    PS:需要引入jquery库
      

  51.   

    楼主请看,源码,Jquery实现的异步,不懂没关系,可以直接用
    1,新建js文件,代码如下://设置市,选项function Setcity(ary)
    { //将获取的存储市名称及编码的字符串进行分离,//每个数组元素中存储一个市的名称及编码
        var arycity = new Array();
        arycity = ary.toString().split("|");
        
    //    var list = document.getElementById("ddlcity");
    //    list.options.length = 0;//清空ddlcity选项
        $("#ddlcity").empty();
        for(i=0;i<arycity.length-1;i++)
        {//将数组arycity中的每个数组元素进行分离//分离出市的名称及市的编码 
              var citystr = null;
              citystr = arycity[i];
              var ary = new Array();
              ary = citystr.toString().split(",");//新增dropdownlist的选项
            var newoption = document.createElement("OPTION");
            newoption.text = ary[0];
            newoption.value= ary[1];
            document.getElementById("ddlcity").options.add(newoption);
        }
    }//jquery异步调用City.ashx
    $(document).ready(function(){$("#ddlProvince").change(function(){//参数传递的两种方法//1,var code = "procode=" + $("#ddlProvince").val();
    //2,data:{procode:code},
         //var code = "procode=" + $("#ddlProvince").val();
            var code =$("#ddlProvince").val();
             $.ajax({
            type:"POST",
            url:"City.ashx",
            data:{procode:code},
            success:Setcity
        })
    })})2,新建ashx文件,代码如下:public class City : IHttpHandler {
        
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";//接收参数
            string code = context.Request.Params["procode"].ToString().Trim();
            //string strcity = GetCity(code);
            //context.Response.Write("Hello World");
            string stritem = GetCity(code);
            context.Response.Write(stritem);
        }    public string GetCity(string procode)
        {
            List<YD.Model.City> citylist = new YD.BLL.City().GetList("*", " provinceId='"+procode+"'","name asc");
            int length = citylist.Count;
            string strary = "";
            for (int i = 0; i < length; i++)
            {
               // strary[i] = citylist[i].name + "|" + citylist[i].code;
                strary += citylist[i].name + "," + citylist[i].code + "|";
            }
            
            return strary;
        }
        
        public bool IsReusable {
            get {
                return false;
            }
        }}前台代码://记得引用jquery包<script src="../js/jquery-1.2.6.pack.js" type="text/javascript"></script><script src="Js/getCity.js" type="text/javascript"></script>                <td>
                        <asp:DropDownList ID="ddlProvince" runat="server" CssClass="normal_sele">
                        </asp:DropDownList>
                        <asp:DropDownList ID="ddlcity" runat="server" CssClass="normal_sele">
                        
                        </asp:DropDownList>
                    </td>
      

  52.   


    少东西 !你缺少这个吗?看看!
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>这你看看少吗?我上次就是少这个!
      

  53.   

    楼主如果不能用ScriptManager那我这有个用js写的 很笨的方法可以实现三联动 异步请求显示
    脚本function check1(val)
    {
        $.ajax({
      type: "get",
      url: "/user/User/NewCompanyTypeAjax.aspx?typeUp="+val+"&grade=2",
      datatype : "json",
      
      success: function(data, textStatus){
               var arrids=new Array();
                arrids=data.split('/');
                load_Area_t(arrids);
      },
      complete: function(XMLHttpRequest, textStatus){
       //HideLoading();
       //alert("complete");
      },
      error: function(){
       //请求出错处理
       alert("数据连接出错!");
      }
    });}
    function load_Area_t(vals)
    {
        var ddlareat = document.getElementById('<%=ddlProductType2.ClientID %>');
        for(var i=ddlareat.length;i>0;i--)    
            ddlareat.remove(ddlareat.options[i]);
        var id="";
        for(var i=0;i<vals.length-1;i++)
        {
            if(i==0)
            {
                id=vals[i].substring(0,vals[i].indexOf(','));
            }          
            var y=document.createElement('option');
            y.text=vals[i].substring(vals[i].indexOf(',')+1);
            y.value=vals[i].substring(0,vals[i].indexOf(','));
            ddlareat.add(y);
        }
        check2(id);
    }function check2(val)
    {
        $.ajax({
      type: "get",
      url: "/user/User/NewCompanyTypeAjax.aspx?typeUp="+val+"&grade=3",
      datatype : "json",
      
      success: function(data, textStatus){
               var arrids=new Array();
                arrids=data.split('/');
                load_Area_t2(arrids);
      },
      complete: function(XMLHttpRequest, textStatus){  },
      error: function(){
       //请求出错处理
       alert("数据连接出错!");
      }
    });
    }
    function load_Area_t2(vals)
    {
        var ddlareat = document.getElementById('<%=ddlProductType3.ClientID %>');
        for(var i=ddlareat.length;i>0;i--)    
            ddlareat.remove(ddlareat.options[i]);
        for(var i=0;i<vals.length-1;i++)
        {        var y=document.createElement('option');
            y.text=vals[i].substring(vals[i].indexOf(',')+1);
            y.value=vals[i].substring(0,vals[i].indexOf(','));
            ddlareat.add(y);
        }
        }页面<asp:DropDownList ID="ddlProductType1" runat="server" CssClass="input300" onchange="check1(this.value)">
     </asp:DropDownList> <asp:DropDownList ID="ddlProductType2" runat="server" CssClass="input300" onchange="check2(this.value)">
     </asp:DropDownList>
     <asp:DropDownList ID="ddlProductType3" runat="server" CssClass="input300" onchange="check3(this.value)">
     </asp:DropDownList>
      

  54.   


    这个很好用的啊!我那这个很清楚了!都是很简单的!就是根据Id查询 绑定节点!方法还要吗?DataTableAreaManager---BLL
            /// <summary>
            /// 根据区的Id查询出区的信息
            /// </summary>
            /// <param name="cid"></param>
            /// <returns></returns>
            public static DataTable GetDatSetAreaById(int cid)
            {
                return ias.GetDatSetAreaById(cid);
            }
    --CityManager
            //根据省份的外键PId查询出城市
            public static DataTable GetDataSetCityById(int pid)
            {
                return fds.GetDataSetCityById(pid);
            }
            //根据省份的外键Pid统计城市
            public static DataTable GetDataCityByCount(int Pid) 
            {
                return fds.GetDataCityByCount(Pid);
            }ProvinceManager 省份   public static DataTable GetProvinceById(int pid) 
            {
                return fds.GetDataSetProvinceById(pid);
            }
            public static DataTable GetDataSetProvinceAlls(string sqlWhere) 
            {
                return fds.GetDataSetProvinceAlls(sqlWhere);
            }
            public static DataTable GetDataSetProvinceByCount(int Pid)
            {
                return fds.GetDataSetProvinceByCount(Pid);
            }
    DAL----------------------
    AreaService---DAL
            #region 王璐璐 2010-7-27 15:02
            /// <summary>
            /// 获得数据列表
            /// </summary>
            public DataTable GetDatSetAreaById(int cid)
            {            string sql = "select * from Area where cid=" + cid;
                return DBHelper.Query(sql).Tables[0];
            }        /// <summary>
            /// 统计区的数量
            /// </summary>
            /// <param name="aid"></param>
            /// <returns></returns>
            public DataTable GetDataAreaByCount(int cid)
            {
                string sql = "select count(cid) from Area where cid" + cid;
                return DBHelper.Query(sql).Tables[0];
            }
            #endregion--cityService        #region 王璐璐 2010-7-27 15:02
            /// <summary>
            /// 获得数据列表
            /// </summary>
            public DataTable GetDataSetCityById(int pid)
            {
                string sql="select * from City where pid ="+pid;
          
                return DBHelper.Query(sql).Tables[0];
            }        
            /// <summary>
            /// 根据城市Id查询统计区的数量
            /// </summary>
            /// <param name="Pid"></param>
            /// <returns></returns>
            public DataTable GetDataCityByCount(int Pid)
            {
                string sql = "select count(CId) from City where pid =" + Pid;            return DBHelper.Query(sql).Tables[0];
            }--ProvinceService
                  
            #region 王璐璐 2010-7-27 15:02
            public DataTable GetDataSetProvinceById(int pid)
            {
                string sql="select * from province where Pid ="+pid;
                return DBHelper.Query(sql).Tables[0];
            }        public DataTable GetDataSetProvinceAlls(string sqlWhere)
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append(" select province.PId,province.[Name],collaborate.proid,count(proid) as cou from province inner join collaborate on(province.pID=" + "collaborate.proid)  group by collaborate.proid,province.PId,province.[Name] order by cou desc");
                if (sqlWhere.Trim()!= "")
                {
                    strSql.Append("where " + sqlWhere);
                }
             
                return DBHelper.Query(strSql.ToString()).Tables[0];
            }        /// <summary>
            /// 通过省份的Id家数
            /// </summary>
            /// <param name="Pid"></param>
            /// <returns></returns>
            public DataTable GetDataSetProvinceByCount(int Pid)
            {
                string sql = "select count(Pid) from province where pid="+Pid;
                return DBHelper.Query(sql.ToString()).Tables[0];
            }
            #endregion
    在不会就呼死你!
      

  55.   

    方法都是自己写的!那个Datatable 人家教我的!刚学会!希望你帮助你!
      

  56.   

    如果jquery也不想用的话,那么只要把那个异步请求的用传统js异步请求就行了//创建异步对象
    function createXMLHttpRequest1() 
    {    if (window.ActiveXObject) 
        {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else if (window.XMLHttpRequest) 
        {
            xmlHttp = new XMLHttpRequest();
        }
    }
    //方法中用此请求
    function send(){
    createXMLHttpRequest1();
                var queryString = "exeistsUserName.aspx?"; 
                queryString = queryString + "UserName="+userName;
                
                
                //方法 handleStateChange1 没有参数 直接使用方法名字引用
                xmlHttp.onreadystatechange = handleStateChange1;
                
                //如果 有参数就是 下面的例子:
                //xmlHttp.onreadystatechange = function(){ handleStateChange1(参数)}            xmlHttp.open("GET", queryString, true);
                xmlHttp.send(null);
    }
    function handleStateChange1() 
            {
                if(xmlHttp.readyState == 4) 
                {
                    if(xmlHttp.status == 200) 
                    {         
                       var data =xmlHttp.responseText;                }
                }
            }
      

  57.   

    http://blog.csdn.net/happy664618843/archive/2010/02/28/5333933.aspx肯定行
      

  58.   

    你把你的表 发来 !需要的几个表都发来!
    我觉的应该是4个  省市区 3个 一个和省市区有关系的 表1个 一共4个!、
    http://topic.csdn.net/u/20100723/13/91a7fc85-9212-47c7-90e4-5bc2e162fb1c.html
    http://topic.csdn.net/u/20100722/13/8e759652-09b7-4c5f-b753-0814587355e2.html这2个贴子是我早几天问的!和你一样的! 你看看人家怎么说的!
      

  59.   


    天哪,没这么费劲吧,给你这么多列子了。顺便问好,PLMM
      

  60.   

    <%@ Page language="c#" Inherits="LinkageList.DataBind" CodeFile="DataBind.aspx.cs" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
    <script type="text/javascript" language="javascript">
    var xmlHttp;
    var provinceID=0;
    function  createXmlHttp()
    {
    if(window.ActiveXObject)
    {
    xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
    }
    else if(window.XMLHttpRequest)
    {
    xmlHttp=new XMLHttpRequest();
    }
    }

    function startRequest(slcprovinceID)
    {
    createXmlHttp();
    provinceID=slcprovinceID;
    xmlHttp.onreadystatechange=readyStateHandler;
    xmlHttp.open("POST",createQueryString(provinceID),true);
    xmlHttp.send(null);
    }

    function readyStateHandler()
    {
    clearCityList();
    if(xmlHttp.readyState==4)
    {
    if(xmlHttp.status==200)
    {
    changeCity(provinceID);
    }
    }
    }

    function changeCity(provinceID)
    {
    clearCityList();
    var xmlDoc=xmlHttp.responseXML;
    var cityIDs=xmlDoc.getElementsByTagName("AreaID");
    var citys=xmlDoc.getElementsByTagName("Name");

    for(var i=0;i<citys.length;i++)
    {
    var cityID=cityIDs[i].firstChild.nodeValue;
    var city=citys[i].firstChild.nodeValue;
    var cityOption=new Option(city,cityID);

    document.forms[0].ddlCity.options.add(cityOption);
    }

    document.forms[0].ddlCity.options[0].selected=true;
    }


    function clearCityList()
    {
    var myOptions=document.forms[0].ddlCity.options;

    for(var i=0;i<myOptions.length;i++)
    {
    document.forms[0].ddlCity.options[i]=null;
    }
    }

    function createQueryString(provinceID)
    {
    var queryString="ReadCity.aspx?"+"provinceID="+provinceID;
    return queryString;
    }
    </script>
    <form id="Form1" method="post" runat="server">
    <asp:Label Runat="server" ID="lblProvince">省份</asp:Label>
    <asp:DropDownList Runat="server" ID="ddlProvince"></asp:DropDownList>
    <asp:Label Runat="server" ID="lblCity">城市</asp:Label>
    <asp:DropDownList Runat="server" ID="ddlCity"></asp:DropDownList>

    </form>
    </body>
    </HTML>
      

  61.   

    以上页面的关联后台代码:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;using System.Data.SqlClient;namespace LinkageList
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public partial class DataBind : System.Web.UI.Page
    {

    protected void Page_Load(object sender, System.EventArgs e)
    {
    if(!this.IsPostBack)
    {
    this.BindDropDownList();
                    
    this.ddlProvince.Attributes.Add("onchange","startRequest(this.options[this.selectedIndex].value)");
    }
    else
    {
    this.ddlProvince.Attributes.Add("onchange","startRequest(this.options[this.selectedIndex].value)");
    }
    }
    private void BindDropDownList()
    {
    SqlConnection con=new SqlConnection("server=127.0.0.1;uid=sa;pwd=12345678;database=Address");
    SqlCommand com=con.CreateCommand();
    com.CommandText="select * from area where ParentID=0"; SqlDataAdapter adpt=new SqlDataAdapter();
    adpt.SelectCommand=com; DataSet ds=new DataSet(); con.Open();
    try
    {
    adpt.Fill(ds);
    }
    catch(Exception ex)
    {

    }
    finally
    {
    con.Close();
    } this.ddlProvince.DataSource=ds;
    this.ddlProvince.DataMember=ds.Tables[0].TableName;
    this.ddlProvince.DataTextField="Name";
    this.ddlProvince.DataValueField="AreaID";
    this.ddlProvince.DataBind();
                
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {     }
    #endregion
            protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
            {        }
    }
    }
      

  62.   

    http://blog.csdn.net/shellwin/archive/2010/06/08/5656732.aspx  这个可以帮助你    
      

  63.   

    readycity.aspx.cs
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Xml;
    using System.Data.SqlClient;namespace LinkageList
    {
    /// <summary>
    /// ReadCity 的摘要说明。
    /// </summary>
    public partial class ReadCity : System.Web.UI.Page
    {
    protected void Page_Load(object sender, System.EventArgs e)
    {
    int provinceID=Convert.ToInt32(this.Request["provinceID"].ToString());
    this.Response.ContentType="text/xml";
    this.WriteXmlDoc(provinceID);
    }
    private void WriteXmlDoc(int provinceID)
    {
    SqlConnection con=new SqlConnection("server=127.0.0.1;uid=sa;pwd=12345678;database=Address");
    SqlCommand com=con.CreateCommand();
    com.CommandText="select * from area where ParentID="+provinceID+""; SqlDataAdapter adpt=new SqlDataAdapter();
    adpt.SelectCommand=com; DataSet ds=new DataSet(); con.Open();
    try
    {
    adpt.Fill(ds);
    }
    catch(Exception ex)
    {

    }
    finally
    {
    con.Close();
    } ds.WriteXml(this.Response.OutputStream);
    this.Response.End();
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {     }
    #endregion
    }
    }
      

  64.   

    数据库字段有三个,AreaId,name,parentid,
    parentid既所属的省份的areaid
      

  65.   

    下面代码本人测试OK.
    在MasterPage使用 <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">  </asp:ScriptManagerProxy>
    在ASPX页面使用   <asp:ScriptManager ID="ScriptManager1" runat="server">    </asp:ScriptManager>  
    就可以了。
    具体代码如下。请你根据自己的需要,稍作修改就可以用了。下面代码有两种方式 一种放在ASPX,一种在MasterPage.请根据自己需要。选择一种吧。aspx前台。
    <%@ Page Title="" Language="C#" MasterPageFile="~/16/M/MasterPage1.master" AutoEventWireup="true" CodeFile="Default1.aspx.cs" Inherits="_16_M_Default1" %><asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>      <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>           
                <asp:DropDownList ID="DropDownList1" runat="server" >
                </asp:DropDownList>
                <asp:DropDownList ID="DropDownList2" runat="server">
                </asp:DropDownList>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server"  ConnectionString="<%$ ConnectionStrings:shinehouseConnectionString %>"  ></asp:SqlDataSource></asp:Content>aspx页面后台:    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SqlDataSource1.SelectCommand = "SELECT * FROM [City] where Level=1";
                DropDownList1.DataSource = SqlDataSource1;
                DropDownList1.DataTextField = "Name";
                DropDownList1.DataValueField = "ID";
                DropDownList1.DataBind();
                DropDownList1.AutoPostBack = true;        }
            DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);    }
        public void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlDataSource1.SelectCommand = "SELECT * FROM [City] where ParentID=" + this.DropDownList1.SelectedValue;
            DropDownList2.DataSource = SqlDataSource1;
            DropDownList2.DataTextField = "Name";
            DropDownList2.DataValueField = "ID";
            DropDownList2.DataBind();
        }
    master 页面:<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage1.master.cs" Inherits="_16_M_MasterPage1" %><!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">
        <title></title>
        <asp:ContentPlaceHolder id="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
            
            </asp:ContentPlaceHolder>
        </div>
        <div>
        <%=DateTime.Now.ToString() %>
        </div>    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
        </asp:ScriptManagerProxy>    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" >
                </asp:DropDownList>
                <asp:DropDownList ID="DropDownList2" runat="server">
                </asp:DropDownList>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:shinehouseConnectionString %>"  ></asp:SqlDataSource>
        </form>
    </body>
    </html>
    master 后台:    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SqlDataSource1.SelectCommand = "SELECT * FROM [City] where Level=1";
                DropDownList1.DataSource = SqlDataSource1;
                DropDownList1.DataTextField = "Name";
                DropDownList1.DataValueField = "ID";
                DropDownList1.DataBind();
                DropDownList1.AutoPostBack = true;
            }
            DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged);    }
        public void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlDataSource1.SelectCommand = "SELECT * FROM [City] where ParentID=" + this.DropDownList1.SelectedValue;
            DropDownList2.DataSource = SqlDataSource1;
            DropDownList2.DataTextField = "Name";
            DropDownList2.DataValueField = "ID";
            DropDownList2.DataBind();
        }