我用js实现二级城市联动菜单,前台代码
<tr>
                <td style="width: 30%; text-align: right">
                    城市</td>
                <td style="text-align: left">
                    <asp:DropDownList ID="ddl_Province" runat="server">
                    </asp:DropDownList>
                    <asp:DropDownList ID="ddl_City" runat="server">
                    </asp:DropDownList></td>
            </tr>
后台代码
protected void Page_Load(object sender, EventArgs e)
    {
        Init_Admin("user");
        ddl_Province.Attributes.Add("onchange", "province_onchange(this)");
        ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>window_onload(document.getElementById('" + ddl_Province.ClientID + "'),document.getElementById('" + ddl_City.ClientID + "'));</script>");js代码
function window_onload(province,city){
if (province!=null)
{
    provinceObject = province;
    cityObject = city;
    addProvince();//调用子函数加省份 
    //provinceObject.options[0].selected = true;
    addCity(province);//调用子函数加城市
    //cityObject.options[0].selected = true;
}
//定义城市二维数组,第一维分34个省,第二维是各省的城市
cityOp = new Array();
cityOp[0] = new Array(1);
cityOp[0][0]=new Option("北京","1");
cityOp[1] = new Array(1);
cityOp[1][0]=new Option("天津","1");cityOp[2] = new Array(1);
cityOp[2][0]=new Option("上海","1");……………………
省略页面已能实现联动功能,但当保存选择的值是却说未引用实例,我的代码是
sCity = ddl_City.SelectedItem.Text;
而以下代码可以
sCity = ddl_City.SelectedValue;
但sCity获得的值却是" ".我看了页面运行的源代码是
<tr>
                <td style="width: 30%; text-align: right">
                    城市</td>
                <td style="text-align: left">
                    <select name="ddl_Province" id="ddl_Province" onchange="province_onchange(this)"> </select>
                    <select name="ddl_City" id="ddl_City"> </select></td>
            </tr>
里面没有option项,但联动功能的确能实现,请问我应该怎样做才能保存选择的值,如果在后台实现js功能,请问有相关可用代码吗,毕竟整个省市资料自己输入不太可能了。先谢谢了

解决方案 »

  1.   

    第一个DropDownList属性里加“AutoPostBack=true”。
      

  2.   

    刚刚我试了在<asp:DropDownList   ID="ddl_Province"   runat="server"> 
                                            </asp:DropDownList> 
    加上“AutoPostBack=true”,行不通,一postback就重新绑定js了,尝试过把
     ddl_Province.Attributes.Add("onchange",   "province_onchange(this)"); 
                    ClientScript.RegisterStartupScript(Page.GetType(),   "",   " <script> window_onload(document.getElementById('"   +   ddl_Province.ClientID   +   "'),document.getElementById('"   +   ddl_City.ClientID   +   "')); </script> "); 
    加在if(!ispostback)里,但这样一回发下拉框就变空,没有绑定数据
      

  3.   

    string Province = Request.From["ddl_Province"].ToString()
    string City = Request.From["ddl_City"].ToString()
      

  4.   

    如果只要获取当前选中项的值的话楼上正解,用Request.From["控件名称"]来获取.
    如果要把生成的全部值都存入数据库的话,暂时还没想到什么好的办法.不过可以用个间接的方法解决
    在页面里面添加一个HiddenField控件,然后把DropDownList的项以","字符相隔的字符串保存在HiddenField控件内,然后在后台获取HiddenField控件的Value值,对字符串处理,就可以操作了
      

  5.   

    按照5楼朋友的做法可以了,不过只能取到该控件的value,但由于我找到的代码
    //定义城市二维数组,第一维分34个省,第二维是各省的城市 
    cityOp   =   new   Array(); 
    cityOp[0]   =   new   Array(1); 
    cityOp[0][0]=new   Option("北京","1"); 
    cityOp[1]   =   new   Array(1); 
    cityOp[1][0]=new   Option("天津","1"); cityOp[2]   =   new   Array(1); 
    cityOp[2][0]=new   Option("上海","1"); value部分是数字,但我需要的是该城市名,而且我现在发现我这个js代码和我的asp.net有冲突,不知哪位有实现城市选择二级联动的asp.net代码,有完整的省市资料的,先谢谢了
      

  6.   

    那你把Text赋予HiddenField控件是一样的,用Javascript遍历DropDownList的Item,获取Text,然后附给HiddenField控件for(var i=0;i<s.length;i++)
    {
      s+=DropDownList1.item[i].innerText
    }
      

  7.   

    上面循环体类的S不是DropDownList,是HiddenField.value值,刚才图方便,没写清楚