ajaxpro两级联动正常,但是只要单击了页面上的按钮或刷新页面后,第二级的droplist的内容全部回到刚加打开页面时的状态,而且取值时也如此。

解决方案 »

  1.   

    如何在单击按钮时,第二级DropDownList还能保持刚才选中的项,并且如何才能取到第二级DropDownList的值(在.cs代码中)
      

  2.   

    因为你点击按钮的同时页面就刷新了,就会重新对你的DropDownList绑定
      

  3.   

    把你选择的第一个下拉值通过URL传递过来,然后在page_load里得到。申明public个全局变量,选种第一个下拉框的值,然后用JS。在body onload事件里重新调用你的级联代码一次就可以了。
      

  4.   

    得加一个隐藏域
    保存第二级的droplist的值然后现加载事件中选隐藏域的那一项
      

  5.   

    得到值 可以做到了,但是如何在单击按钮后,第二级DropDownList还能保持刚才选中的项?
    把你选择的第一个下拉值通过URL传递过来,然后在page_load里得到。申明public个全局变量,选种第一个下拉框的值,然后用JS。在body onload事件里重新调用你的级联代码一次就可以了。 
    看不明白,能给些详细代码吗
      

  6.   

    请看如下代码:
    页面:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DropDownListTest.aspx.cs" Inherits="AjaxTest.DropDownListTest" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body onload="_OnLoad('<%=m_selectedValue%>');">
        <script language="javascript" type="text/javascript">
        <!--
        //onchange事件
        function _Onchange()
        {
            //*************清空目标下拉框
            var destDropdown = document.getElementById("<%=DropDownList2.ClientID %>");
            //
            destDropdown.options.length = 0;//
            //源下拉框
            var srcDropdown = document.getElementById("<%=DropDownList1.ClientID %>");
            //得到选择的值
            var selectevalue = srcDropdown.options[srcDropdown.options.selectedIndex].value;
            //
            if(selectevalue.length>0)
            {
                _GetValue(selectevalue);
            }
            else
            { 
                alert("请选择");
            }
            return false;
        }
        function _GetValue(TempValue)
        {
            //ajaxpro返回值
            AjaxTest.DropDownListTest.GetDataSet(TempValue,_callback1);
        }
        function _callback1(res) 
        {
            //得到返回的值
            var rows = res.value.Tables[0].Rows.length;
            //
            var destDropdown = document.getElementById("<%=DropDownList2.ClientID %>");
            //
            for(var i=0;i<rows;i++)
            {
                //**********添加下拉框
                var newoption = new Option(res.value.Tables[0].Rows[i].Text, res.value.Tables[0].Rows[i].Value);
                destDropdown.options.add(newoption);
            }    }
        //onload事件
        function _OnLoad(TempValue)
        {
            if(TempValue.length>0)
            {
                 _GetValue(TempValue);
                 //
                 var srcDropdown = document.getElementById("<%=DropDownList1.ClientID %>");
                 //
                 for(var i=0;i<srcDropdown.options.length;i++)
                 {
                    if(TempValue == srcDropdown.options[i].value)
                    {
                         srcDropdown.options[i].selected  = true;
                         break;
                    }
                 }
                 
            }
        }
        //
        function test()
        {
            //源下拉框
            var srcDropdown = document.getElementById("<%=DropDownList1.ClientID %>");
            //得到选择的值
            var selectevalue = srcDropdown.options[srcDropdown.options.selectedIndex].value;
            //
            if(selectevalue.length>0)
            {
                 window.location.href = "DropDownListTest.aspx?Temp=" + selectevalue;
                 
            }
            else{alert("请选择");}
            //
            return false;
        }
        //-->
        </script>
        <form id="form1" runat="server">
        <div>
            From:
            <asp:DropDownList ID="DropDownList1" runat="server">
                <asp:ListItem Value="">请选择</asp:ListItem>
                <asp:ListItem Value="1">1</asp:ListItem>
                <asp:ListItem Value="2">2</asp:ListItem>
            </asp:DropDownList>
            To:
             <asp:DropDownList ID="DropDownList2" runat="server">
            </asp:DropDownList>
            <br />
            <asp:Button ID="Button1" runat="server" Text="刷新"/>
        </div>
        </form>
    </body>
    </html>
    后台代码:
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;namespace AjaxTest
    {
        public partial class DropDownListTest : System.Web.UI.Page
        {
            /// <summary>
            /// 申明一个全局变量:通过URL得到的选择的值
            /// </summary>
            public string m_selectedValue = string.Empty;
            protected void Page_Load(object sender, EventArgs e)
            {
                //注册ajaxpro
                AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxTest.DropDownListTest));
                //得到选择的值
                m_selectedValue = Request.QueryString["Temp"] == null ?
                    string.Empty : Request.QueryString["Temp"].ToString();
                //注册onchange事件
                this.DropDownList1.Attributes.Add("onchange", "return _Onchange();");
                //注册刷新按钮的事件
                this.Button1.Attributes.Add("onclick","return test();");
            }
            /// <summary>
            /// 返回dataset值
            /// </summary>
            /// <param name="strSelectedValue">选择的值</param>
            /// <returns></returns>
            [AjaxPro.AjaxMethod]
            public DataSet GetDataSet(string strSelectedValue)
            {
                DataSet ds = new DataSet();
                ds.Tables.Add(GetDataTable(strSelectedValue));
                return ds;        }
            /// <summary>
            /// 返回Table
            /// </summary>
            /// <param name="strSelectedValue">选择的值</param>
            /// <returns></returns>
            private DataTable GetDataTable(string strSelectedValue)
            {
                DataTable tblData = new DataTable();
                tblData.Columns.Add("Text");
                tblData.Columns.Add("Value");
                //选择了1
                if (strSelectedValue == "1")
                {
                    tblData.Rows.Add("Obsession", "Karen");
                    tblData.Rows.Add("Vanished", "Robards");
                }
                else
                {
                    tblData.Rows.Add("Magician: Apprentice", "Feist, Raymong E.");
                    tblData.Rows.Add("Magician: Master", "Feist");
                }            return tblData;
            }                  }
    }web.config:
    <httpHandlers>
    <!-- ajaxPro -->
    <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
    </httpHandlers>
    注意:别用ajaxpro 7.7.31.1_DLL.zip 这个版本。返回dataset有问题请用以前的版本:最好用6.10.6.2测试结果合符要求
      
     
      

  7.   

    还是不行,我把测试语句:alert("good");放在:
     function test() 
        { 
            //源下拉框 
            var srcDropdown = document.getElementById(" <%=DropDownList1.ClientID %>"); 
            //得到选择的值 
            var selectevalue = srcDropdown.options[srcDropdown.options.selectedIndex].value; 
            // 
            if(selectevalue.length>0) 
            { 
                window.location.href = "DropDownListTest.aspx?Temp=" + selectevalue; 
                
            } 
            else{alert("请选择");} 
            // 
            return false; 
        } 
    中的第一句前,执行,放在第二句后就不执行了它,为什么
      

  8.   

    就是
    function test() 
        { 
    alert("good");
            //源下拉框 
            var srcDropdown = document.getElementById(" <%=DropDownList1.ClientID %>"); 
            //得到选择的值 
            var selectevalue = srcDropdown.options[srcDropdown.options.selectedIndex].value; 
            // 
            if(selectevalue.length>0) 
            { 
                window.location.href = "DropDownListTest.aspx?Temp=" + selectevalue; 
                
            } 
            else{alert("请选择");} 
            // 
            return false; 
        } 
    此时,单击按钮时弹出”good",而下面时:function test() 
        {         //源下拉框 
            var srcDropdown = document.getElementById(" <%=DropDownList1.ClientID %>"); 
            //得到选择的值 
            var selectevalue = srcDropdown.options[srcDropdown.options.selectedIndex].value; 
            // 
    alert("good");
            if(selectevalue.length>0) 
            { 
                window.location.href = "DropDownListTest.aspx?Temp=" + selectevalue; 
                
            } 
            else{alert("请选择");} 
            // 
            return false; 
        } 单击时不弹出“good",不知为什么
      

  9.   

    我又测试了一下,发现在 Page_Load中m_selectedValue 的值始终为空,不知为什么
      

  10.   

    我把我的代码贴上吧:
    aspx中是:
    <head runat="server" >
        <title>利国实验小学考试成绩输入</title>
     <script language="javascript" type="text/javascript">
      
    function GetTeamList()
    {
        var nianji=document.getElementById("nianjiDropDownList");
       
        _Default.TeamName(nianji.value,TeamCallBack);
        _Default.xuekeName(nianji.value,xuekeCallBack);
         
    }
    function TeamCallBack(response)
    {
        if(response.value !=null)
       {
            var team=document.getElementById("banjiDropDownList");
            var dt=response.value;
            team.length=0;
            for(var i=0;i<dt.Rows.length;i++)
            {
                var team_text=dt.Rows[i]["class"];
                var team_value=dt.Rows[i]["class"];
                team.options.add(new Option(team_text,team_value));     
            }
            
        }   
    }function xuekeCallBack(response)
    {
        if(response.value !=null)
       {
            var team=document.getElementById("xuekeDropDownList");
            var dt=response.value;
            team.length=0;
            for(var i=0;i<dt.Rows.length;i++)
            {
                var team_text=dt.Rows[i]["学科"];
                var team_value=dt.Rows[i]["学科"];
                team.options.add(new Option(team_text,team_value)); 
                        } 
            
        }  
         getData();           
        
    }  function getData()
    {
          var p=document.getElementById("xuekeDropDownList");
          var pindex = p.selectedIndex;
          var pValue = p.options[pindex].value;
          var pText  = p.options[pindex].text; 
          document.getElementById("<%=xmlabel.ClientID%>").innerText=pText;
    } function test() 
        { 
         
            //源下拉框 
            var srcDropdown = document.getElementById(" <%=nianjiDropDownList.ClientID %>"); 
            //得到选择的值 
            var selectevalue = srcDropdown.options[srcDropdown.options.selectedIndex].value; 
            alert("good");
            // 
            if(selectevalue.length>0) 
            { 
                window.location.href = "Default.aspx?Temp=" + selectevalue; 
                
            } 
            else{alert("请选择");} 
            // 
            return false; 
        } //onload事件 
        function _OnLoad(TempValue) 
        { 
            if(TempValue.length>0) 
            { 
                _GetValue(TempValue); 
                // 
                var srcDropdown = document.getElementById(" <%=nianjiDropDownList.ClientID %>"); 
                // 
                for(var i=0;i <srcDropdown.options.length;i++) 
                { 
                    if(TempValue == srcDropdown.options[i].value) 
                    { 
                        srcDropdown.options[i].selected  = true; 
                        break; 
                    } 
                } 
                
            } 
        } </script>
    </head>
    <body  onload="_OnLoad(' <%=m_selectedValue%>');" onkeypress=" return Enter();" >  
    aspx.cx中是:    public string m_selectedValue = string.Empty; 
        [AjaxPro.AjaxMethod]
        public DataTable TeamName(string systemselectname)
        {
            try
            {
                OleDbConnection oleDbConnection1 = new OleDbConnection(@"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""D:\liuhai\wangscore\studentscore.mdb"";Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1");
                oleDbConnection1.Open();           // OleDbCommand OleDbCommand1 = new OleDbCommand("Select class from banji Where grade=" + systemselectname + " order by ID desc", oleDbConnection1);
               //cmdresults = OleDbCommand1.ExecuteNonQuery();
                OleDbDataAdapter sda = new OleDbDataAdapter("Select class from banji Where grade=" + systemselectname + " order by ID ", oleDbConnection1);            DataTable dt = new DataTable();
                //SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);
                oleDbConnection1.Close();
                return dt;        }
            catch
            {
                return null;
            }
        }
        [AjaxPro.AjaxMethod]
        public DataTable xuekeName(string systemselectname)
        {
            try
            {
                OleDbConnection oleDbConnection1 = new OleDbConnection(@"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""D:\liuhai\wangscore\studentscore.mdb"";Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1");
                oleDbConnection1.Open();            OleDbDataAdapter sda = new OleDbDataAdapter("Select 学科 from xueke Where 年级=" + systemselectname + " order by ID ", oleDbConnection1);            DataTable dt = new DataTable();
                //SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.Fill(dt);
                oleDbConnection1.Close();
                return dt;        }
            catch
            {
                return null;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
            m_selectedValue = Request.QueryString["Temp"] == null ?
                string.Empty : Request.QueryString["Temp"].ToString();        Label2.Text = m_selectedValue+"945";
            GridView1.Columns[1].HeaderText = ((HtmlInputHidden)((System.Web.UI.Page)System.Web.HttpContext.Current.Handler).FindControl("xmlabel")).Value.ToString();
                 GridView1.AutoGenerateColumns = false;
               
          
            if (!IsPostBack)
            {
           banjiDropDownList.DataSource = TeamName(nianjiDropDownList.SelectedItem.Value.Trim());
           banjiDropDownList.DataTextField = "class";
           banjiDropDownList.DataValueField = "class";
           banjiDropDownList.DataBind();       xuekeDropDownList.DataSource = xuekeName(nianjiDropDownList.SelectedItem.Value.Trim());
           xuekeDropDownList.DataTextField = "学科";
           xuekeDropDownList.DataValueField = "学科";
           xuekeDropDownList.DataBind();
           this.nianjiDropDownList.Attributes.Add("onclick", "GetTeamList();");
                this.xuekeDropDownList.Attributes.Add("onclick", "getData()");
                this.xianshishengButton.Attributes.Add("onclick","return test();"); 
                           this.baocunButton.Attributes.Add("onclick", "return   _confirm();");
                }
           
        }