asp.net中用ajaxpro实现三级联动后如何取得所选值(在线等ajax高手请进啊....),从别的地方下的,自己没有使用过ajaxpro看了一下午也没搞成功,那位高手帮帮忙。小弟谢谢了100献上.

解决方案 »

  1.   

    后台用request["控件Name"]来获得
      

  2.   

    资源不在啊?  地址是不是发错了?
         先顶下吧!在给你发点例子 http://www.wangchao.net.cn/bbsdetail_495545.htmlhttp://blog.csdn.net/zhoufoxcn/archive/2008/01/07/2029204.aspx  2级联动! 道理基本是一样的!
      

  3.   

    http://topic.csdn.net/u/20090412/09/8988bd89-47cc-4c65-a058-14d2f8480cad.html 看着里 源码在。解决马上结贴。谢谢各位了。
      

  4.   

    http://topic.csdn.net/u/20090412/09/8988bd89-47cc-4c65-a058-14d2f8480cad.html 看着里 源码在。解决马上结贴。谢谢各位了。
      

  5.   

    http://topic.csdn.net/u/20090412/09/8988bd89-47cc-4c65-a058-14d2f8480cad.html 看着里 源码在。解决马上结贴。谢谢各位了。
      

  6.   

    你是给
     <asp:DropDownList ID="ddl1" runat="server"> 
                  </asp:DropDownList> 
                  <asp:DropDownList ID="ddl2" runat="server"> 
                  </asp:DropDownList> 
                  <asp:DropDownList ID="ddl3" runat="server"> 
                  </asp:DropDownList> 着3个DropDownList  里面绑定数据吗? 
    如果是的话! 你能不能够! 调用他里面的
     AutoPostBack="True" OnSelectedIndexChanged="DrpM_SelectedIndexChanged" 事件呢?
      在后台
       protected void DrpM_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.DrpD.Items.Clear();
            int D = 0;
            switch (this.DrpM.SelectedValue)选种的值!  着是我以前做的一个例子!
            {
                case "1":
                case "3":
                case "5":
                case "7":
                case "8":
                case "10":
                case "12":
                    D = 32;
                    break;
                case "4":
                case "6":
                case "9":
                case "11":
                    D = 31;
                    break;
                case "2":
                    D = 30;
                    break;
            }
            for (int i = 1; D > i; i++)
            {
                ListItem ListD = new ListItem();
                ListD.Value = Convert.ToString(i);
                ListD.Text = Convert.ToString(i);
                this.DrpD.Items.Add(ListD);
            }
            this.DrpD.Enabled = true;
            this.UpdatePanel2.Update();
        }
      

  7.   

    功能全部实现了,选中的值只能取到第一个的值,其它两个值取不到。我在把源码 和数据结构贴出来,请大家费费神帮忙解决谢谢了!
    数据库:
    1 ID INT IDENTITY(1,1) PRAMYKEY
    2 areaname varchar(20) //省市县名称
    3 oneid int 
    4 twoid int--------------------------------数据实例-----
    ID       areaname     oneid   twoid
    1        北京市           0       1
    2        东城区           1       2
    3        西城区           1       2
    4        山东省           0       1
    5        临沂市           4       2
    6        济南市           4       2
    7        青岛市           4       2
    8        四方区           7       3
    9        芝罘区           7       3
    10       历下区           6       3
    11       槐荫区           6       3
    ----------------------------------------------
    demo.aspx 页面
    ----------------------------ajaxpro javascript---------
    <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[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>
    ---------------------DropDownList 
                            <asp:DropDownList ID="ddl1" runat="server">
                            </asp:DropDownList>
                            <asp:DropDownList ID="ddl2" runat="server">
                            </asp:DropDownList>
                            <asp:DropDownList ID="ddl3" runat="server">
                            </asp:DropDownList>--------------------------------------------------------------demo.aspx.cs
    ------------------页面代码
     protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default)); //必要的        if (!IsPostBack) BindDc();
        } /// <summary>
        /// 获取下级分类
        /// </summary>
        [AjaxPro.AjaxMethod]
        public DataSet getNextClass(string cid)
        {
            //因为不希望页面可以知道字段名称 所以 as txt,id as vol 如果是sql ser 可以用 = 
            //页面获取的 列名称 必须跟这个一同样 而且区分大小写 一般都是这个地方容易疏忽了
            //所以二级分类没变化
            int oneid = Convert.ToInt32(cid);
            DataSet ds;
            try
            {
                return ds = bna.GetNext(oneid);
            }
            catch
            {
                return null;
            }
        }
     private void BindDc()
        {
            //第一个
            ddl1.DataSource = bna.GetPro();
            ddl1.DataTextField = "areaname";
            ddl1.DataValueField = "ID";
            ddl1.DataBind();
            if (ddl1.DataSource != null)
                ddl1.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ddl2');");
            //可以先判断 DropDownList.SelectedItem.Value
            //第二个
            int oneid = Convert.ToInt32(ddl1.SelectedItem.Value);
            ddl2.DataSource = bna.GetPro(oneid);
            ddl2.DataTextField = "areaname";
            ddl2.DataValueField = "ID";
            ddl2.DataBind();        //第三个
            if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options[selectedIndex].value,'ddl3');");
            int oneTwo = Convert.ToInt32(ddl2.SelectedItem.Value);
            ddl3.DataSource = bna.GetNext(oneTwo);
            ddl3.DataTextField = "areaname";
            ddl3.DataValueField = "ID";
            ddl3.DataBind();
        }-----------------存储过程
    -----GetNext
    ALTER PROCEDURE sp_nts_Area_Next
    @oneid int
     AS 
    select ID as vol , areaname as txt from nts_area where  oneid = @oneid 
    ---------GetPro
    ALTER PROCEDURE sp_nts_Area_GetPro
     AS 
    SELECT 
    *
     FROM [nts_Area] where oneid = 0-------------------------------------------
    这就是全部的源码,谢谢各位了!!!!在线等。能实现级联下拉效果,问题是只能取第一个的值。
    不能取得后两个的值,我想要源码。谢谢,不是我懒不考虑,是我实在不知道怎么做了。谢谢了!!!!
      

  8.   


    private void BindDc() 
        { 
            //第一个 
            ddl1.DataSource = bna.GetPro(); 
            ddl1.DataTextField = "areaname"; 
            ddl1.DataValueField = "ID"; 
            ddl1.DataBind(); 
            if (ddl1.DataSource != null) 
                ddl1.Attributes.Add("onchange", "showNext(this.options[this.selectedIndex].value,'"+ddl2.ClientID+"');"); 
            //可以先判断 DropDownList.SelectedItem.Value 
            //第二个 
            int oneid = Convert.ToInt32(ddl1.SelectedItem.Value); 
            ddl2.DataSource = bna.GetPro(oneid); 
            ddl2.DataTextField = "areaname"; 
            ddl2.DataValueField = "ID"; 
            ddl2.DataBind();         //第三个 
            if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext(this.options[this.selectedIndex].value,'"+ddl3.ClientID+"');"); 
            int oneTwo = Convert.ToInt32(ddl2.SelectedItem.Value); 
            ddl3.DataSource = bna.GetNext(oneTwo); 
            ddl3.DataTextField = "areaname"; 
            ddl3.DataValueField = "ID"; 
            ddl3.DataBind(); 
        } 
      

  9.   

    @Sandy945  啊非可能是我没说明白,我的意思是。我能实现级联的效果,我需要的是DropDownList更改选项后提交时获得用户所选的值
    谢谢....等啊 ....
      

  10.   

    用:
    Request["控件Name"]来获取!
      

  11.   

    有很多的AJAX控件的
    用微软的UpdatePanel就行。
      

  12.   

    使用html下拉控件,用一个hiddenfiled来作为服务器端与客户端传值的桥梁。
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  13.   

    @啊非
     string address = this.ddl1.SelectedItem.Text.ToString();
    只能取得第一个,其它两个都是初始值.
      

  14.   

    加个js函数    function getValue()    
        {
            var ddl1=document.getElementById('<%=ddl1.ClientID %>');
            var ddl2=document.getElementById('<%=ddl2.ClientID %>');
            var ddl3=document.getElementById('<%=ddl3.ClientID %>');
            var one=ddl1.options[ddl1.selectedIndex].text;
            var two=ddl2.options[ddl2.selectedIndex].text;
            var three=ddl3.options[ddl3.selectedIndex].text;
            
            document.getElementById('<%=hid.ClientID %>').value=one+','+two+','+three;
            
        }页面上加个<asp:HiddenField ID="hid" runat="server" />在你按钮的OnClientClick 后面写getValue();   
      

  15.   

    取值的时候 用
    string []str=string.IsNullOrEmpty(hid.Value)?null:hid.Value.Split(',');str数组就是你需要的
      

  16.   

    还得问下,<asp:Button ID="Button2" runat="server"  Text="完成" OnClick="Button2_Click" /> 是提交事件,怎么一个OnClick里写不了两个事件,那我应该怎么取值啊,再后台谢谢了。