小弟现在做了一个搜索控件用到了菜单的3级级联,也就是选省的时候后2个下拉菜单分别出相应的市跟区,现在的问题是当我点了搜索之后,提交了整个表单,市跟区的下拉菜单里头没有值了,也就是说必须再在省的下拉菜单里面选一下重新联动才能得到值,这样的问题就是当客户重新在搜索的时候,会出现跟他的预期有出入,我现在就是想问各位如何在提交之后还能继续保存住刚才联动之后你所选到的值呢?

解决方案 »

  1.   

    你绑定的时候处理不当吧?
    在page_load时,是if(!IsPostBack){..}吗?
      

  2.   

    HTML代码
    ====================================================================================
    <%@ Control Language="c#" AutoEventWireup="false" Codebehind="SearchCon.ascx.cs" Inherits="RoadCenter.SearchCon" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <LINK href="image\v1.2.css" type="text/css" rel="stylesheet">
    <script language="javascript">
    function drop1()
    {
    while(document.all["SearchCon1_lstSort"].options.length>1)
    document.all["SearchCon1_lstSort"].options.remove(1);
    while(document.all["SearchCon1_lstGoodSort"].options.length>1)
    document.all["SearchCon1_lstGoodSort"].options.remove(1);
    if(document.all["SearchCon1_lstSearch"].selectedIndex>0)
    {
    var selected1 = new Array();
    selected1 = allData[document.all["SearchCon1_lstSearch"].selectedIndex-1];
    var i;
    for(i=0;i<selected1.length;i++)
    {
    var oOption = document.createElement("OPTION");
    document.all["SearchCon1_lstSort"].options.add(oOption); oOption.innerText = selected1[i][0][1];
    oOption.value = selected1[i][0][0];
    }
    } var sg = document.getElementById("SearchCon1_lstSearch");
        var sindex = sg.selectedIndex;
        var sValue = sg.options[sindex].value;
        var sText  = sg.options[sindex].text;
        
        var parent = document.getElementById("SearchCon1_lstSort");
        var pindex = parent.selectedIndex;
        var pValue = parent.options[pindex].value;
        var pText  = parent.options[pindex].text;
        
        var child = document.getElementById("SearchCon1_lstGoodSort");
        var cindex = child.selectedIndex;
        var cValue = child.options[cindex].value;
        var cText  = child.options[cindex].text;

    document.Form1.SearchCon1_hid3.value=cText;                   
    document.Form1.SearchCon1_hid2.value=pText; 
        document.Form1.SearchCon1_hid1.value=sText;   
        
    }
    function drop2()
    {
    while(document.all["SearchCon1_lstGoodSort"].options.length>1)
    document.all["SearchCon1_lstGoodSort"].options.remove(1); if(document.all["SearchCon1_lstSort"].selectedIndex>0)
    {
    var selected2 = new Array();
    selected2 = allData[document.all["SearchCon1_lstSearch"].selectedIndex-1][document.all["SearchCon1_lstSort"].selectedIndex-1][1];
    var i;
    for(i=0;i<selected2.length;i++)
    {
    var oOption = document.createElement("OPTION");
    document.all["SearchCon1_lstGoodSort"].options.add(oOption); oOption.innerText = selected2[i][1];
    oOption.value = selected2[i][0];
    }
    }

    var parent = document.getElementById("SearchCon1_lstSort");
        var pindex = parent.selectedIndex;
        var pValue = parent.options[pindex].value;
        var pText  = parent.options[pindex].text;
        
        var child = document.getElementById("SearchCon1_lstGoodSort");
        var cindex = child.selectedIndex;
        var cValue = child.options[cindex].value;
        var cText  = child.options[cindex].text;

    document.Form1.SearchCon1_hid3.value=cText;                   
    document.Form1.SearchCon1_hid2.value=pText;
    }function drop3()
    {    
    var child = document.getElementById("SearchCon1_lstGoodSort");
        var cindex = child.selectedIndex;
        var cValue = child.options[cindex].value;
        var cText  = child.options[cindex].text;
    document.Form1.SearchCon1_hid3.value=cText; 
    }
    </script>
    <table id="Table1" width="500" align="center" bgColor="#993300">
    <tr vAlign="middle" align="left">
    <td colSpan="3" height="17"><asp:dropdownlist id="lstSearch" runat="server" DataValueField="categoryID" DataTextField="Description">
    <asp:ListItem Value="请选择">请选择</asp:ListItem>
    </asp:dropdownlist>&nbsp;&nbsp;&nbsp;&nbsp;<asp:textbox id="txtSearch" runat="server"></asp:textbox>&nbsp;&nbsp;&nbsp;&nbsp;<asp:dropdownlist id="lstSort" runat="server" BackColor="White">
    <asp:ListItem Value=" 选择全部 "> 选择全部 </asp:ListItem>
    </asp:dropdownlist>&nbsp;&nbsp;&nbsp;&nbsp;<asp:dropdownlist id="lstGoodSort" runat="server">
    <asp:ListItem>选择全部</asp:ListItem>
    </asp:dropdownlist>&nbsp;&nbsp;&nbsp;&nbsp;<asp:linkbutton id="lnkSearch" runat="server">搜索</asp:linkbutton><INPUT id="hid1" type="hidden" size="1" name="hid1" runat="server">
    <INPUT id="hid2" type="hidden" size="1" name="hid2" runat="server"> <INPUT id="hid3" type="hidden" size="1" name="hid3" runat="server">
    </td>
    </tr>
    </table>
    </SCRIPT>
      

  3.   

    CS部分代码
    =========================================================================
    private void Page_Load(object sender, System.EventArgs e)
    {
    this.txtSearch.Attributes.Add("onkeydown","if(event.keyCode==13){"+Page.GetPostBackEventReference(this.lnkSearch)+"}");
    if(!IsPostBack)
    {
    this.LoadData();
    this.lstSearch.DataSource = dtSG;
    this.lstSearch.DataBind();

    this.lstSearch.Items.Insert(0,new ListItem("请选择",""));
    this.lstSearch.Attributes.Add("onchange","drop1();");
    this.lstSort.Attributes.Add("onchange","drop2();");
    this.lstGoodSort.Attributes.Add("onchange","drop3();"); }
    Response.Write(this.CreateJSArray());

    }
    public void LoadData()//数据访问的一些方法我就不贴了
    {
    CategoriesDS dsChild = new CategoriesDS();
    ds = da.GetSort(0);
    dsShop = daShop.GetAll();

    dtSG = new DataTable();
    dtSG.Columns.Add("categoryID");
    dtSG.Columns.Add("Description"); dtSG.Rows.Add(new object[]{"A","搜索商铺"});
    dtSG.Rows.Add(new object[]{"B","搜索商品"});
    dtParent = new DataTable();
    dtParent.Columns.Add("categoryID");
    dtParent.Columns.Add("Description");
    dtParent.Columns.Add("parentID"); dtChild = new DataTable();
    dtChild.Columns.Add("categoryID");
    dtChild.Columns.Add("Description");
    dtChild.Columns.Add("parentID");
    for(int i = 0;i< dsShop.shopSorts.Count; i++)
    {
    dtParent.Rows.Add(new object[]{"-1",dsShop.shopSorts[i].shopSort,"A"});
    }
    for(int i = 0;i< ds.categories.Count; i ++)
    {
    dtParent.Rows.Add(new object[]{ds.categories[i].CategoryID,ds.categories[i].Description,"B"});

    dsChild = da.GetSort(ds.categories[i].CategoryID);
    for(int j = 0;j < dsChild.categories.Count;j ++)
    {
    dtChild.Rows.Add(new object[]{dsChild.categories[j].CategoryID,dsChild.categories[j].Description,dsChild.categories[j].ParentID});
    }
    }
    }
    /// <summary>
    /// 构造JS脚本代码
    /// </summary>
    /// <returns>字符串</returns>
    public string CreateJSArray()
    {
    if(ViewState["JSArray"]!=null)
    {
    return ViewState["JSArray"].ToString();
    }
    else
    {
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("<script language='javascript'>");
    sb.Append("var allData = new Array("+dtSG.Rows.Count+");");
    for(int i=0;i<dtSG.Rows.Count;i++)
    {
    string parent = dtSG.Rows[i][0].ToString();
    DataRow[] rows2 = dtParent.Select("[parentID]='"+parent+"'");
    sb.Append("allData["+i.ToString()+"] = new Array("+rows2.Length+");");
    for(int j=0;j<rows2.Length;j++)
    {
    string child = rows2[j][0].ToString();
    DataRow[] rows3 = dtChild.Select("[parentID]='"+child+"'");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"] = new Array(2);");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][0] = new Array(2);");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][0][0] = '"+rows2[j][0].ToString()+"';");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][0][1] = '"+rows2[j][1].ToString()+"';");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][1] = new Array("+rows3.Length+");");
    for(int k=0;k<rows3.Length;k++)
    {
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][1]["+k.ToString()+"] = new Array(2);");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][1]["+k.ToString()+"][0] = '"+rows3[k][2].ToString()+"';");
    sb.Append("allData["+i.ToString()+"]["+j.ToString()+"][1]["+k.ToString()+"][1] = '"+rows3[k][1].ToString()+"';");
    }
    }
    } sb.Append("</script>");
    ViewState["JSArray"] = sb.ToString();
    return sb.ToString();
    }===============================================================================
    帮看一下吧 3Q了 仍然在线等
      

  4.   

    现在就是想提交之后后2级的下拉菜单的文本框里面仍然能保存你提交之间选定的值,现在是提交之后里面就什么都没咯,是不是可以在javascript里面改改的,小弟javascript菜鸟