郁闷,这个问题 我搞了好长时间  都没能获得满意的效果,,哪位兄弟若能帮我解决 一定重谢.
就是 两个 DropDownList 联动的问题,1.我希望 实现 客户端联动 也就是不希望它联动闪烁.
2.后台获得 DropDownList 选中的值,插入数据库.
3.查询数据库 然后把 查到的值 如:北京市 朝阳区 绑定到 这两个DropDownList 上也就是 一个页面 Page_Load 显示用户信息 Button事件 修改用户信息.
看起来和简单,但做起来总是有好多问题,希望大家能给出 详细解决办法,,一定重谢..

解决方案 »

  1.   

    地球人都知道是AJAX, 但问题是AJAX偶还没学, 不懂啊~~~~给个源码吗?!
    另外, 如果用到AJAX组件的, 我感觉特麻烦, 总是出现莫明其秒的错误, 自己手写AJAX.....是好, 但不会~~~~
      

  2.   

    安装ajax2.0然后把updatepanel拖过去
    然后把两个dropdownlist放进去 
    之后再把一个scriptmangae控件拉过来 放在页面头部
    就ok了 什么都不用写
    但是 省份城市的代码要写
      

  3.   

    看来 没有人能 用 普通方法解决啦,,郁闷呀 关键是 我没有学 AJAX呀
      

  4.   

    http://singlepine.cnblogs.com/articles/257954.html
      

  5.   

    提供一个ajax根据国家代码获得城市列表的例子,ajax包装使用的是prototype/// JScript 文件
    var DWCityObj = null;//pid 国家代码
    //dwCityObj 城市的下拉列表对象function GetCitys(pid,dwCityObj)
    {
        var url = "../public/AjaxGetCitys.aspx";
        var pars = "PID=" + escape(pid);
        DWCityObj = dwCityObj;
        try
        {
            var myAjax = new Ajax.Request(
            url,
            {
            method: 'get',
            parameters: pars,
            onComplete: GetReturnXml,
            onSuccess:GetSuccess,
            onFailure:GetFailure
            });
        };
        catch(ex)
        {
            alert(ex.message)
        }
    }function ClearDwCity()
    {
        var ops = $A(DWCityObj.getElementsByTagName("option"));
        ops.each(function(op){
        op.removeNode(true);
        })
    }//成功
    function GetReturnXml(originalRequest)
    {
        //debugger;
        ClearDwCity();
        var xmlDoc = GetXmlObj("<Root>" + originalRequest.responseText + "</Root>");
        var objNodes = $A(xmlDoc.selectNodes("//City"));
        objNodes.each(function(objNode){
        var oOption = document.createElement("OPTION");
        DWCityObj.options.add(oOption);
        oOption.innerText = objNode.selectSingleNode("Name").text;
        oOption.value = objNode.selectSingleNode("ID").text;;
        })
    }//完成
    function GetSuccess()
    {
    }//出错
    function GetFailure()
    {
        alert("Failure to search information!");
        return false;
    }后台:protected void Page_Load(object sender, EventArgs e)
        {
            IList<CityInfo> lts = new City().GetEnglishCitys(Request["PID"]);
            string xml = "<Citys>";
            for (int i = 0; i < lts.Count; i++)
            {
                xml += "<City>";
                xml += "<Name>" + lts[i].CityName + "</Name>";
                xml += "<ID>" + lts[i].CityName + "</ID>";
                xml += "</City>";
            }
            xml += "</Citys>";
            Response.Write(xml);
        }
      

  6.   

    用JS 也可以,,但是当 后台 给前台 指定值的 时候 DropDownList2 的值 不可以指定,,就是用下面的代码 指定啦 如;this.DropDownList2.SelectedItem.Text=" 朝阳区"
    虽然前台可以 显示出来  但是 当你选中它 的时候 其实 它什么 都不是 更本就不是列表里的值 所以当你这样做的时候 DropDownList2 里就会有两个 朝阳区,,我该 怎么做  大家快给点  具体的 代码吧  一定重谢. 不信没人能解决. 
      

  7.   

    看来   没有人能   用   普通方法解决啦,,郁闷呀   关键是   我没有学   AJAX呀
    --------------------------------------------------------------------
    用客户端的回调。前提是你要熟悉:Js
      

  8.   

    用javascript 是最好的效果,后台获取用 Form["ControlName"]
      

  9.   

    那我 要 把查到 的数据 显示 到DropDownList 里面  同时要求  所有项都列出来,并且查到的那项  被选中,,该怎么做呢?  不要 总是随便 说说,,当你说的时候,你是否有把握可以把他 按我的要求做出来呢? 如果可以 麻烦请你 把详细代码 写出来,一定十分感谢. 如果你自己 没有把问题 想明白,,请不要说的那么 轻松.
      

  10.   

    用十楼的方法吧。xmlhttprequest异步调用。
      

  11.   

    用ajax的控件 ajax:penal 来实现。里面还是放服务器控件代码写法没有什么不同。看效果就是无刷新
      

  12.   

    数据量大就用AJAX吧..小的话一次性读入,放在JS里面的变量里面.AJAX代码!
    需要牺牲一个页面来实现2级联动,如果是3级就2个页面.
    牺牲的页面代码:using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Text;
    using System.Xml;public partial class Address_DDL : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.Request["state"] != null)
            {
                string state = Server.UrlDecode(this.Request["state"].ToString());
                SqlConnection conn = DB.conCreate();
                SqlDataAdapter da = new SqlDataAdapter("select [City] from [Postage] where ([Provinces] = @Provinces) GROUP BY [City] ORDER BY MAX([ID]) ASC", conn);
                SqlParameter province=da.SelectCommand.Parameters.Add("@Provinces",SqlDbType.NVarChar);
                province.Value=state.Trim();
                DataSet ds = new DataSet("smallclass");
                da.Fill(ds);
                XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Response.ContentEncoding);
                //XmlTextWriter writer = new XmlTextWriter("c:/177.txt", Encoding.UTF8);
                writer.Formatting = Formatting.Indented;
                writer.Indentation = 4;
                writer.IndentChar = ' ';
                ds.WriteXml(writer);
                writer.Flush();
                Response.End();
                writer.Close();
            }
        }
    }
    -----------------------------------------显示页面加如下面的JS代码
    -------------------------
    <script language="javascript" type="text/javascript">
          function load(state){
          
        
           var drp2 = document.getElementById("ddlCity");
           for(var i = drp2.options.length-1;i>=0;i--)
           {
             drp2.remove(i);
           }
           var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
           var oDoc = new ActiveXObject("MSXML2.DOMDocument");
           oHttpReq.open("POST", "Address_DDL.aspx?state="+escape(state), false);
           oHttpReq.send("");
           
           
           var result = oHttpReq.responseText;       oDoc.loadXML(result);
           
               
           var items = oDoc.selectNodes("//smallclass/Table/City");
          
           for (var i = 0;i<items.length;i++)
           {
          
           var newOption = document.createElement("OPTION");
           newOption.text = items[i].text;
           newOption.value = items[i].text;
           drp2.options.add(newOption);
           }
    </script>
      

  13.   

    至于后台的值,你联动的DROPDOWNLIST最好用SELECT控件,就是HTML控件(runat=server),然后用在后台用Request.form[""]来获取.至于第三个问题.动态构建ArrayList来实现吧.查点资料.很容易。
      

  14.   

    例子:protected void Page_Load(object sender, EventArgs e)
        {
            Ajax.Utility.RegisterTypeForAjax(typeof(WebForm_Food_FoodGame));
         }[Ajax.AjaxMethod()]
        public string BallotSAdd(int ID)
        {
            GamesFood nmm_GamesFood = new GamesFood();
            GamesFoodInfo OGamesFoodInfo = nmm_GamesFood.GetGamesFoodInfoByFoodGameID(ID);
            int ticketnum = OGamesFoodInfo.Ticket + 1;
            if (new Com.Netmarch.BLL.GamesFood().UpdateTicket(ticketnum,ID) != null)
            {
                return "true";
            }
            else
            {
                return "false";
            }
        }function  CheckFrom(num)
        {
             var returnInfo = WebForm_Food_FoodGame.HaveUser().value;
             
             if (returnInfo == "true")
             {
                alert('对不起,您还没有登陆');
                return false;
             }
             
             var returnInfor = WebForm_Food_FoodGame.BallotSAdd(num).value;
             if (returnInfor == "true")
    {
                    alert("投票成功");
    }

    if (returnInfor == "false")
     {
        alert("投票失败");
        return false;
     }
        }
      

  15.   

    给你推荐一个ASP.NET方面的专家,去看看他在csdn的博客,也可以问问他,希望对你有用!
    http://blog.csdn.net/dotnetWalker
      

  16.   

    你先用会刷新的方法写好,然后配置好ajax.net ,拖放一个updatapanel组件,然后把下拉框移进去就OK了
      

  17.   

    你这个是AJAX典型实例。
    要想用其他方法,可以看看Icallbackeventhandler的例子。
      

  18.   

    引用:# wuxing2006"你先用会刷新的方法写好,然后配置好ajax.net   ,拖放一个updatapanel组件,然后把下拉框移进去就OK了"
      

  19.   

    用iframe 将dropDownList的值保存到session中
      用的时候直接到 Session中去读取!
      

  20.   

    用magicajax吧 很好用的控件
      

  21.   

    先用刷新的方式实现,然后在把你的代码放到UPDATEPANEL里面,当然,必须先放一个ScriptManager,否则会报错
      

  22.   

    ASP.NET无刷新三级联动下拉列表,同样适用与firefox
    http://www.sosuo8.com/article/show.asp?id=891
      

  23.   

    也可以用ajax框架prototype,ext等来做,当然js也可以
      

  24.   

    我先做过这种,,不过代码太长了,, 我只能说一下流程了放两个DropDownList   第一个,在后台中,用代码绑定,并且添加一个触发事件为第二个DropDownList添加项第二个DropDownList然后在后台获取第二个DropDownList的值时,要用Form["控件的名字:"]记住是控件的名字,不能是ID
      

  25.   

    MS AJAX 1.0  UpdatePanel
      

  26.   

    直接安装ajax 在页面中应用很简单的拖两个控件而已 不用学!
      

  27.   

    用现成的AjaxPanel,不用任何代码
      

  28.   

    可以用的方法太多了。。xmlhttprequest,或者callback来处理,都可以xmlhttprequest的使用就是21楼的方法
    取数据可以放到一个空页面里面处理(即使是多个dropdownlist都只用放到一个空页面处理)callback需要用到4个函数,前后端各2个一个接一个收服务器端的两个,RaiseCallbackEvent是收,GetCallbackResult是发
    Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
    End FunctionPublic Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
    End Sub//这个函数是向客户端注册用于发送的js函数
    Private Sub RegisterScript()
            Dim sCallBackScript As String
            Dim Script As StringBuilder
            Script = New StringBuilder()        //注册js的接收函数
            sCallBackScript = Page.ClientScript.GetCallbackEventReference(Me, "CallStr", "ReceiveFromServer", "null", True)        //注册js的发送函数,在客户端直接用CallServer(string)就可以了
            Script.AppendLine("<SCRIPT language='javascript' id='js_" & Me.ID & "'>")
            '---------------------Send dat to server -------------------------------------------------
            Script.AppendLine("    function Callserver(Str)")
            Script.AppendLine("    {")
            Script.AppendLine("        var CallStr = Str;")
            Script.AppendLine("    " & sCallBackScript & ";")
            Script.AppendLine("    }")
            Script.AppendLine("</SCRIPT>")        If Script.ToString <> "" Then Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "js_" + Me.ID, Script.ToString(), False)
        End Sub//这个是在客户端用于接受的函数
    function ReceiveFromServer(RcvMsg)     // recieve infomation from server as a string
    {}当然,页面需要实现ICallbackEventHandler类
    最后,因为客户端和服务器端接收和发送的都是字符串,所以需要自己解析,这个就需要自己定义好规则了(我建议你使用特殊字符,可以通过ASCII转)