<asp:DropDownList ID="ddl1" runat="server">
              </asp:DropDownList><asp:DropDownList ID="ddl2" runat="server">
              </asp:DropDownList><asp:DropDownList ID="ddl3" runat="server">
              </asp:DropDownList>
我用这三个控件做三级联动..己经无问题...我在MSSQL里查询搜索的是用ddl3里的TEXT值.己用dl3.SelectedItem.Text提出.但是一级菜单是完全正确的..而当我把ddl1下拉一次,选择其它选择项的时候,比如ddl1(2).就会出错.其dl3.SelectedItem.Text里的值还是第ddl1(1)-ddl2(1)-ddl3(1)的内容
而不是ddl1(2)-ddl2(1)-ddl1(*)里的值.当点击按钮以后,我的联动框内容就会变为ddl1(2) ddl2(ddl1(1)-ddl2(1)) ddl3(ddl1(1)-ddl2(1)-ddl3(1)) 这完全是错误的呀..闷啊.我是用DropDownList做的多条件搜索.当点击确定按钮选择的ddl3的内容如果变掉.分页的时候查询出来的内容就是错误的.
那高手帮一下呀...

解决方案 »

  1.   

    DropDownList的 AutoPostBack设为False, 取值用,selectValue
      

  2.   

    assassintor() ( ) 信誉:100  2007-07-20 15:10:25  得分: 0     DropDownList的 AutoPostBack设为False, 取值用,selectValue
      
     
    -----------------------------------------------------------------------------
    可是我一定得要Text里的值呀..
      

  3.   

    后台:   protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(House_Hack)); //必要的
            if (!Page.IsPostBack)
            {
                BindDc(); 
            }private void BindDc()
        {
            //第一个
            string sql = @"select * from city where city_Parent=0";
            ddl1.DataSource = getDs(sql);
            ddl1.DataTextField = "city_Name";
            ddl1.DataValueField = "city_id";
            ddl1.AutoPostBack = false;
            ddl1.DataBind();
            if (ddl1.DataSource != null) ddl1.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ctl00_ContentPlaceHolder1_ddl2');");
            //可以先判断 DropDownList.SelectedItem.Value
            //第二个
            sql = @"select * from city where city_Parent=" + ddl1.SelectedItem.Value;
            ddl2.DataSource = getDs(sql);
            ddl2.DataTextField = "city_Name";
            ddl2.DataValueField = "city_id";
            ddl2.AutoPostBack = false;
            ddl2.DataBind();        //第三个
            if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ctl00_ContentPlaceHolder1_ddl3');");
            sql = @"select * from city where city_Parent=" + ddl2.SelectedItem.Value;
            ddl3.DataSource = getDs(sql);
            ddl3.DataTextField = "city_Name";
            ddl3.DataValueField = "city_id";
            ddl3.AutoPostBack = false;
            ddl3.DataBind();    }
      /// <summary>
        /// 获取下级分类
        /// </summary>
        [AjaxPro.AjaxMethod]
        public DataSet getNextClass(string cid)
        {
            //因为不希望页面可以知道字段名称 所以 as txt,id as vol 如果是sql ser 可以用 = 
            //页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
            //所以二级分类没变化
            string sql = @"select city_Name as txt,city_id as vol from city where city_Parent=" + cid;
            try
            {
                return getDs(sql);
            }
            catch
            {
                //throw;
                return null;
            }
        } /// <summary>
        /// 返回一个DataSet
        /// </summary>
        /// <param name="SQL"></param>
        /// <returns></returns>
        public DataSet getDs(string SQL)
        {
           // SqlConnection conn = myConn();
            DataSet Ds = new DataSet();
            SqlDataAdapter Da = new SqlDataAdapter(SQL, connstring);
            try
            {
                Da.Fill(Ds);
                return Ds;
            }
            catch
            {
                return null;
                //throw;
            }    }
      

  4.   

    前台:
    PS:我用了母版,所以这里就不写出form的内容了.<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
    <%@ Page Language="C#" enableEventValidation="false" AutoEventWireup="true" CodeFile="Hack.aspx.cs" Inherits="House_Hack" Title="Untitled Page" %><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 = House_Hack.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=="ctl00_ContentPlaceHolder1_ddl2"){
        getBid("ctl00_ContentPlaceHolder1_ddl3").options.length=0;
        getBid("ctl00_ContentPlaceHolder1_ddl3").options.add(new Option("请选择",0));
        }
    for(var i=0; i<v.Tables[0].Rows.length; i++)
         {
         var txt = v.Tables[0].Rows[i].txt; //这个地方需要注意区分大小写
           var vol = v.Tables[0].Rows[i].vol; //跟dataset表的列名称要一致
           slt.options.add(new Option(txt,vol));
         }
    }
       }
       return;
            }
            -->
    </script><asp:DropDownList ID="ddl1" runat="server">
                  </asp:DropDownList><asp:DropDownList ID="ddl2" runat="server">
                  </asp:DropDownList><asp:DropDownList ID="ddl3" runat="server">
                  </asp:DropDownList>
      

  5.   

    DropDownList的值是否放在資料庫中?
    是的話每PostBack一次,就databind一次
      

  6.   

    Request.Form["ctl00$ContentPlaceHolder1$ddl3"]; 取到值了,但是是value里的比如上海为 value:“1”,如何取出“上海”?