我的做无刷新三级联动,根本上实现了,有一点小BUG。就是选择省份的时间,城市加载的是对的,而县城只加载
城市下拉列表中城市下的一个县城,这个问题该如何解决?
还有就是不管我怎么选择省份,城市和县城,在CS代码接收时,城市和县城永远都是第一次页面加载时的城市和县城,
而我选择时页面上无刷新连动也实现了。怎么能取得连动后所选择的城市和县城?
string province=this.ddlProvince.SelectedText.Trim();
string city=this.ddlCity.SelectedText.Trim();
string town=this.ddlTown.SelectedText.Trim();
省份取得的是对的,而城市和县城永远都是第一次页面加载时的城市和县城.而页面上显示的是无刷新选择后
的省份,城市和县城.如何做才能取得选择后的城市和县城?

解决方案 »

  1.   

    Request.Form[ddlCity.UniqueID]
    Request.Form[ddlTown.UniqueID]
    通过Request.Form获取提交给服务器的值
      

  2.   

    是不是要先清空原来DropDownList中的东西 再加载啊
      

  3.   

    ddlProvince.Attrbutes.add("onchange","js方法(this.selectedvalue,"ddlCity")");
    ddlCity.Attrbutes.add("onchange","js方法(this.selectedvalue,"ddlTown")");
    js方法里每次触发onchange事件就会把ddlCity.length=0,ddlTown.length=0。
    也就是清空后在重新添加当前省份下的所有城市,当前城市下的所有县城。
    请问怎么样才能在CS代码里正确取到ddlCity的Text值和ddlTown的Text值。另有一问题就是,我每次选择省份时,城市列表框加载的内容是对的,而当前城市下的县城只有一个,
    要选择一下别的城市在选择这个城市,县城列表的内容才会全部加载。
    我该如何做?数据表的结构如下:
    area_id    area_name    area_parentid
    主键         区域名         上一级id,如果没有上一级就为0。比如中国的上一级id为0。
      

  4.   

    你用javascript按ID取下拉列表的value
    就是选择省份的时间,城市加载的是对的,而县城只加载 
    城市下拉列表中城市下的一个县城,这个问题该如何解决? 
    是什么意思?是不是省份变了,城市变了,县城仍然是pageload是的数据?
    你可一在省份改变的事件中改写县城的数据,用省份默认的城市所有的县城数据填充
    你选择江西省时,城市如果是南昌排在第一,县城下拉列表则以南昌为城市所有的县城数据填充
      

  5.   

    http://xlphoto.com.cn/web/netsite_list.asp
    看看这个,有完整代码,程序逻辑为N级联动
      

  6.   

    province的onchange事件,引发city控件进行更行,待city更新完之后,再引发town进行更新。如果改变了省,你只更新 city下拉框,不管town,当然town还是原始数据了..多极联动中,任何一项进行更改,它的所有子孙项同时也要进行更新。
      

  7.   

    页面代码如下:
    <script language="javascript" type="text/javascript">
          <!--
            // ACLOUD 常用JS函数
            function getBid(s)
            {
            return document.getElementById(s);
            }
            function getBmc(s)
            {
                return document.getElementsByName(s);
            }
        
            //显示分类列表
            function showNext(sid,obj)
            {
                if(sid==null || sid=="" || sid.length<1)
                {
                    return;
                }
                var slt =getBid(obj);
                var v = _Default.getNextClass(sid).value; // 类的名称            if (v != null)
                {      
                if(typeof(v) == "object")
                {
                    slt.length = 0;
                slt.options.length = 0;            
                var txt = v.Rows[0].Area_name; //这个地方需要注意区分大小写
                var vol = v.Rows[0].Area_id;
        slt.options.add(new Option(txt,vol));
                if(obj=="ddlCity")
                {
                    getBid("ddlTown").options.length=0;
                    var txt = v.Rows[0].Area_name; //这个地方需要注意区分大小写
                    var vol = v.Rows[0].Area_id;
                getBid("ddlTown").options.add(new Option(txt,vol));
                }
                for(var i=1; i<v.Rows.length; i++)
                   {
                       var txt = v.Rows[i].Area_name; //这个地方需要注意区分大小写
                     var vol = v.Rows[i].Area_id; //跟dataset表的列名称要一致
                     slt.options.add(new Option(txt,vol));
                   }
                }
            }
            return;
            }
            
            function change()
            {
                var index=document.form.ddlcountry.selectedIndex;
                if(document.form.ddlcountry.options[index].text == "中国")
                {
                    china.style.display = 'block';
        other.style.display = 'none';
        getBid("RFVCity").Enabled=false;
                }
                else
                {
                    other.style.display = 'block';
        china.style.display = 'none';
        //document.form.getElementById("RFVCity").Enabled=true;
                }
            }
            
            -->
    </script>
    </head>
    <body>
        <form id="form" name="form" runat="server">
            <table>
                <tr>
                    <td>国家:<select id="ddlcountry" runat="server" name="ddlcountry" onchange="change()">
                                <option value="01" selected>中国</option>
                                <option value="02">其它</option>
                        </select><%--<asp:DropDownList ID="ddlcountry" runat="server">
                        <asp:ListItem Value="01">中国</asp:ListItem>
                        <asp:ListItem Value="02">其它</asp:ListItem>
                    </asp:DropDownList>--%></td>
                </tr>
                <tr>
                    <td><div id="china">省份:<asp:DropDownList ID="ddlProvince" runat="server"></asp:DropDownList><br />
                        城市:<asp:DropDownList ID="ddlCity" runat="server"></asp:DropDownList><br />
                        县城:<asp:DropDownList ID="ddlTown" runat="server"></asp:DropDownList></div></td>
                </tr>
                <tr>
                    <td><div id="other" style="display:none">城市:<asp:TextBox ID="txtCity" runat="server"></asp:TextBox>
                        </div></td>
                </tr>
                <tr>
                    <td>
                        <asp:Button ID="btnOK" runat="server" Text="提交" OnClick="btnOK_Click" /></td>
                </tr>
            </table>
        </form>
    </body>CS代码如下:
    protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
            if (!this.IsPostBack)
            {
                this.bindMsg();
            }
        }    /// <summary>
        /// 获取下级分类
        /// </summary>
        [AjaxPro.AjaxMethod]
        public Area_ClassDS.Area_ClassDataTable getNextClass(string cid)
        {
            //页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
            //所以二级分类没变化       
            try
            {
                Area_ClassTableAdapter ata = new Area_ClassTableAdapter();
                return ata.GetDataByArea_ParentID(cid);
            }
            catch
            {
                //throw;
                return null;
            }
        }    /// <summary>
        /// 数据邦定
        /// </summary>
        public void bindMsg()
        {
            //第一个
            Area_ClassTableAdapter ata = new Area_ClassTableAdapter();
            this.ddlProvince.DataSource = ata.GetDataByArea_ParentID("01");
            this.ddlProvince.DataTextField = "Area_name";    //邦定的显示字段
            this.ddlProvince.DataValueField = "Area_id";     //邦定的隐藏字段
            this.ddlProvince.DataBind();
            if (this.ddlProvince.DataSource != null)
            {
                this.ddlProvince.Attributes.Add("onchange", "showNext(ddlProvince.options[selectedIndex].value,'ddlCity');");
            }        //可以先判断 DropDownList.SelectedItem.Value
            //第二个        this.ddlCity.DataSource = ata.GetDataByArea_ParentID(this.ddlProvince.SelectedValue);
            this.ddlCity.DataTextField = "Area_name";
            this.ddlCity.DataValueField = "Area_id";
            this.ddlCity.DataBind();
            if (this.ddlCity.DataSource != null)
            {
                this.ddlCity.Attributes.Add("onchange", "showNext1(ddlCity.options[selectedIndex].value,'ddlTown');");
            }        //第三个
            this.ddlTown.DataSource = ata.GetDataByArea_ParentID(this.ddlCity.SelectedValue);
            this.ddlTown.DataTextField = "Area_name";
            this.ddlTown.DataValueField = "Area_id";
            this.ddlTown.DataBind();
        }    protected void btnOK_Click(object sender, EventArgs e)
        {
            Response.Write(this.ddlProvince.SelectedItem.Text);
            Response.Write(this.ddlCity.SelectedItem.Text);
            Response.Write(this.ddlTown.SelectedItem.Text);
            //Response.Write(this.ddlProvince.SelectedValue + ",");
            //Response.Write(this.ddlCity.SelectedValue + ",");
            //Response.Write(this.ddlTown.SelectedValue);
            //Response.Write(Request.Form["ddlProvince"]+"<br>");
            //Response.Write(Request.Form["ddlCity"]+"<br>");
            //Response.Write(Request.Form["ddlTown"]);
        }我的问题就是上面的问题
      

  8.   

    今天才发现,我这样做选择省份时,县城列表框和城市列表框加载的是都是所选择的省份的第一个城市,
    而我选择城市时县城才加载对。我要问的问题就是我选择省份时城市和县城列框框怎么改才能加载正确,
    还有就是怎么能正确取的城市和县城列表框的值。
    我用的是.net 2005工具
    表结构在4楼,数据源是强类型数据集,如下:
    select * from Area_Class where area_parentid = @area_parentid