各位老大,如果让客户端的javascript响应该服务器事件呀,比如说我有两个DropDownList1和DropDownlist2两个控件,我想实现随着DropDownList1的选择不同DropDownList2也出现不能的值,比,现在我不想用服务器端事件,想实现无刷新效果,因为用了以后每选择一那页面老是刷新,对了,那两件控件的值要从数据库里面读出来,请教各位以前的解决方法

解决方案 »

  1.   

    this.DropDownList1.Attributes["onchange"]  =  "OnDropDownList1SelectedChanged();";
    OnDropDownList1SelectedChanged是你在客户端注册的脚本,在脚本里处理两个控件之间关系就可以了。
      

  2.   

    我给你一个我写的二级无刷新联动下拉框吧.以下为页面代码:<form id="Form1" method="post" runat="server">
    <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
    <asp:DropDownList id="DropDownList2" runat="server"></asp:DropDownList>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    //以XML求取数据
    function XmlPost(obj)
    {
      var svalue = obj.value;
      var webFileUrl = "?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").length=0;
        var piArray = result.split(",");
        for(var i=0;i<piArray.length;i++)
        {
          var ary1 = piArray[i].toString().split("|");
          //alert(ary1[0].toString());
          document.all("DropDownList2").options.add(new Option(ary1[1].toString(),ary1[0].toString()));
        }
      }
      else
      {
        alert(result);
      }
    }
    //-->
    </SCRIPT>    
    </form>以下为后台代码:private System.Data.OleDb.OleDbConnection conn;private DataTable get_dt(string sql)
    {
      string connstr = "Provider=MSDAORA.1;Password=aqjc;User ID=aqjc;Data Source=aqjc";
      this.conn = new OleDbConnection(connstr);
      this.conn.Open();
      OleDbCommand myOleDbCommand = new OleDbCommand(sql,this.conn);
      OleDbDataAdapter myData = new OleDbDataAdapter(myOleDbCommand);  DataSet myDataset = new DataSet();
      try
      {
        myData.Fill(myDataset);
      }
      catch(Exception ex)
      {
        throw ex;
      }  this.conn.Close();
      return myDataset.Tables[0];  
    }private void Page_Load(object sender, System.EventArgs e)
    {
      string brc_id = this.Request.QueryString["brc_id"];
      if(brc_id + "a" != "a")
      {
        this.down2_bind(brc_id);
      }  if(!this.IsPostBack)
      {
        this.down1_bind();
      }
    }/// <summary>
    /// 返回第2个下拉框需要的值给xmlhttp
    /// </summary>
    /// <param name="brc_id"></param>
    private void down2_bind(string brc_id)
    {
      string mystr = "";
      string sql = "select brc_id,brc_name from asm_branch where brc_parentid = '" + brc_id + "'";
      DataTable mytab = this.get_dt(sql);  if(mytab.Rows.Count != 0)
      {
        for(int i=0;i<mytab.Rows.Count;i++)
        {
          mystr += "," + mytab.Rows[i][0].ToString() + "|" + mytab.Rows[i][1].ToString();
        }
        mystr = mystr.Substring(1);
      }
      this.Response.Write(mystr);
      this.Response.End();
    }/// <summary>
    /// 绑定第一个下拉框
    /// </summary>
    private void down1_bind()
    {
      string sql = "select brc_id,brc_name from asm_branch where brc_level = '1'";
      DataTable mytab = this.get_dt(sql);
      this.DropDownList1.DataSource = mytab;
      this.DropDownList1.DataValueField = "brc_id";
      this.DropDownList1.DataTextField = "brc_name";
      this.DropDownList1.DataBind();
      this.DropDownList1.Attributes.Add("onchange","XmlPost(this);");
    }
      
      

  3.   

    to:conghui(月是故乡明) 
      呵呵,你也得开贴给些分才好啊~
      

  4.   

    呵呵,,
    我感觉 在设完  autoPostBack  后
    关键是要在
     if(!this.IsPostBack)
      {
        this.down1_bind();
            this.down2_bind();
      }
    将它们进行重新的绑定