none
请教,二级联动,我在回传一次后,第二个选框里【选中】的值如何才能保存住?孟兄,请赐教! RRS feed

  • 问题

  • <%@ Page Language="C#" MasterPageFile="../ProjectInfo/MasterPage.master" EnableEventValidation="false" AutoEventWireup="true"
        CodeFile="test.aspx.cs" Inherits="ProjectInfo_test" Title="Untitled Page" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="contentCenter" runat="Server">


        <script language="JavaScript" type="text/javascript">  
      <!--  
      //以XML求取数据  
      function   XmlPost(obj)  
      {  
        var   svalue   =   obj.value; 
        var   webFileUrl   =   "test.aspx?brc_id="+svalue;  
        var   result   =   "";  
        var   xmlHttp   =   new   ActiveXObject("MSXML2.XMLHTTP");  
        xmlHttp.open("POST",   webFileUrl,   false);  
        xmlHttp.send("");  
        result   =   xmlHttp.responseText;       
        if(result   !=   "")  
       {     
          document.all("<%= DropDownList2.ClientID %>").length=0;  
          var   piArray   =   result.split(",");  
          for(var   i=0;i<piArray.length;i++)  
          {   
             document.all("<%= DropDownList2.ClientID %>").options.add(new   Option(piArray[i].toString())); 
          }  
        }  
        else  
        {  
          alert(result);  
        }  
      }  
      //-->  
        </script>

        <asp:DropDownList ID="DropDownList1" Width="100px" runat="server">
        </asp:DropDownList>
        <select id="DropDownList2" style=" width:100px;" runat="server"></select>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button3" runat="server" Text="Button" OnClick="btn_click"   />//在这里,我点按钮,地区被显示在textbox里面,但回传后,select值回到初始值,我选择的值丢了!因为我做的页面里面有一个其他用途的回传的按钮,所以要在提交前要回传一次,就出现了这种问题

    </asp:Content>
    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 DB_Operation;
    using System.Text;

    public partial class ProjectInfo_test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Encoding gb2312 = Encoding.GetEncoding("gb2312");
            Request.ContentEncoding = gb2312;
            string brc_id = this.Request.QueryString["brc_id"];
            if (brc_id + "a" != "a")
            {
                this.down2_bind(brc_id);
            }
            if (!this.IsPostBack)
            {
                this.down1_bind();
            }
    //我不知道问题是出在这里?,但如果我这里不加的话,那第一次运行的时候第二个选框是空,每回传一次,第二个选框都变空了
            string tempstr;
            tempstr = DropDownList1.SelectedValue;
            string tempcmd = "Select  AreaCity  From Com_Area where AreaProvince='" + tempstr + "'";
            DBConnection tempdb = new DBConnection();
            DataSet tempds = tempdb.getDataSet(tempcmd, "table");
            DropDownList2.Items.Clear();

            if (tempds.Tables["table"].Rows.Count != 0)
            {
                for (int i = 0; i < tempds.Tables["table"].Rows.Count; i++)
                {
                    DropDownList2.Items.Add(tempds.Tables["table"].Rows[i]["AreaCity"].ToString().Trim());
                }
            }

        } 
        private void down2_bind(string brc_id)
        {
            string mystr = "";
            string sql = "Select  AreaCity  From Com_Area where AreaProvince= '" + brc_id + "'";
            DBConnection db = new DBConnection();
            DataSet ds = db.getDataSet(sql, "table");
            DataTable mytab = ds.Tables["table"];

            if (mytab.Rows.Count != 0)
            {
                for (int i = 0; i < mytab.Rows.Count; i++)
                {
                    mystr += "," + mytab.Rows[i][0].ToString();
                }
                mystr = mystr.Substring(1);
            }
            this.Response.Write(mystr);
            this.Response.End();
        }
        ///   <summary>  
        ///   绑定第一个下拉框  
        ///   </summary>  
        private void down1_bind()
        {
            string sql ;
            sql = "Select distinct AreaProvince  From Com_Area";
            DBConnection db = new DBConnection();
            DataSet ds = db.getDataSet(sql, "table");
            DataTable mytab = ds.Tables["table"];
            this.DropDownList1.DataSource = mytab;
            this.DropDownList1.DataValueField = "AreaProvince";
            this.DropDownList1.DataTextField = "AreaProvince";
            this.DropDownList1.DataBind();
            this.DropDownList1.Attributes.Add("onchange", "XmlPost(this);");
        }
        protected void btn_click(object obj, EventArgs e)
        {
            string str1, str2;
            str1 = DropDownList1.SelectedValue.ToString();
            str2 = Request.Form[DropDownList2.Name].ToString();
            TextBox1.Text = str2;
        }

    }

    2009年4月2日 7:32

答案

  • 办法1:两个都在服务器端添加选项,而不是在客户端使用js实现
    办法2:在提交回去的返回的时候,也就是注册StartUpScript脚本,执行

    o = document.getElementById('<%= DropDownList1.ClientID %>')
    XmlPost(o)

    建议使用document.getElementById,不要再用document.all
    孟宪会
    2009年4月2日 7:41
    版主
  • 你遍历一下,将选中的值遍历、判断,再执行selected=true
    孟宪会
    2009年4月2日 8:53
    版主
  • 楼主,你好

    如果采用老孟的方法仍然没有满足你的要求,你可以使用一个HiddenField用来保存每次postback时第二个dropdownlist的值,然后在页面加载的时候在前端进行遍历判断,如果找到相同的则设置select=TRUE.
    Microsoft Online Community Support
    2009年4月7日 5:28

全部回复

  • 办法1:两个都在服务器端添加选项,而不是在客户端使用js实现
    办法2:在提交回去的返回的时候,也就是注册StartUpScript脚本,执行

    o = document.getElementById('<%= DropDownList1.ClientID %>')
    XmlPost(o)

    建议使用document.getElementById,不要再用document.all
    孟宪会
    2009年4月2日 7:41
    版主
  • 孟兄,我试了一下,还是没有效果,有点不明白,执行脚本,怎么能保存住我一开始选中的值呢?
    2009年4月2日 8:15
  • 我的效果是这样的,可能说的不清楚
    第一次加载  安徽(第一个droplist)    滁州(第二个droplist),我点击把滁州变为合肥 ,然后点button 回传一次,textbox显示合肥,但回传后第二个选框(第二个droplist)的值又变为滁州,而不是我选中的合肥!因为我的页面里在提交前,有个回传事件,所以回传后怎么保存住我选的合肥,请孟兄指教
    2009年4月2日 8:20
  • 你遍历一下,将选中的值遍历、判断,再执行selected=true
    孟宪会
    2009年4月2日 8:53
    版主
  • 楼主,你好

    如果采用老孟的方法仍然没有满足你的要求,你可以使用一个HiddenField用来保存每次postback时第二个dropdownlist的值,然后在页面加载的时候在前端进行遍历判断,如果找到相同的则设置select=TRUE.
    Microsoft Online Community Support
    2009年4月7日 5:28