功能:点击页面上的按钮,在页面上自动添加一组两个DropDownList控件(DropDownList1,Control),当DropDownList1选择值为1时,Control控件变成textbox,当DropDownList1选择值为2时,Control控件变成DropDownList
问题:选择DropDownList1时,两个控件都消失,应该是DropDownList1的DropDownList.AutoPostBack = true;
刷新页面造成的,现在不知道有啥好方法实现描述的功能(应该是用Ajax,不过我不是很熟,回答请详细一些~~~~~)以下是我的代码html代码
<asp:UpdatePanel ID="UpdatePanel_AddCol" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <div id="addcol" class="clsColumn4" runat ="server"></div>
 </ContentTemplate>
  <Triggers>
<asp:AsyncPostBackTrigger ControlID="Button_UpdatePanel_AddCol" EventName="Click" />
</Triggers>
</asp:UpdatePanel>c#代码protected void Button_UpdatePanel_AddCol_Click(object sender, EventArgs e)
    {
        DropDownList ddl = new DropDownList();
        ddl.ID = "ph1";
        DropDownList DropDownList = new DropDownList();
        ddl.Items.Add(new ListItem("(指定しない)", ""));
        using (ContactViewDetailDataSetTableAdapters.contact_data_infoTableAdapter ta1
            = new ContactViewDetailDataSetTableAdapters.contact_data_infoTableAdapter())
        {
            using (ContactViewDetailDataSet.contact_data_infoDataTable dt1
                = ta1.GetItemData())
            {
              
                for (int m = 0; m < dt1.Rows.Count; m++)
                {
                    DropDownList.Items.Add(new ListItem(dt1.Rows[m]["item_name"].ToString(), dt1.Rows[m]["item_id"].ToString()));
                }
                DropDownList.Items.Insert(0, new ListItem("(指定しない)", ""));
                DropDownList.SelectedIndexChanged += new EventHandler(DropDownList_SelectedIndexChanged);
                DropDownList.AutoPostBack = true;
            }
        }
        this.addcol.Controls.Add(DropDownList);
        this.addcol.Controls.Add(ddl);
    }
    protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
    {
        Control phtmp = this.FindControl("ph1");
        DropDownList ddl = sender as DropDownList;        Control tmpctrl;
        string item_id = ddl.SelectedValue.ToString();
        if (item_id.Length == 0)
        {
            addcol.Controls.Remove(phtmp);
            DropDownList ddltmp = new DropDownList();
            ddltmp.Items.Add(new ListItem("(指定しない)", ""));
            addcol.Controls.Add(ddltmp);           
        }
        else
        {
            tmpctrl = CheckControls(Convert.ToInt16(item_id));
            addcol.Controls.Remove(phtmp);
            addcol.Controls.Add(tmpctrl);
        }    }

解决方案 »

  1.   

    如果没有ajax ,那么post了以后也可以直接从dropdownlist中取到数据
    你可以直接在page_load方法中,取到dropdownlist的值,再赋值给自己不完了
      

  2.   

    你点击的时候必须重新生成一次
    DropDownList DropDownList = new DropDownList();
      ddl.Items.Add(new ListItem("(指定しない)", ""));这样的功能使用显示、隐藏的方法很好实现的
      

  3.   

    看你代码用得是UpdatePanel ,第一次加载是不是有?跟踪下你的代码看下。
      

  4.   

    选择了DropDownList1下拉框之后DropDownList_SelectedIndexChanged都没有进去就直接把两个后台生成的控件刷掉了啊
      

  5.   

    两个控件都是前台点击一个按钮之后,在后台生成的,加载时候是之后一个div
      

  6.   

    请问lz为什么一定要在后台实现呢?用Js控制控件的显示和隐藏不行(⊙_⊙)?
      

  7.   

    <%@ Page Language="C#" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected void Button1_Click(object sender, EventArgs e)
      {
        if (Request.RequestType == "POST")
        {
          int num = Convert.ToInt32(Request.Form["count"]);
          for (int i = 0; i < num; i++)
          {
            Response.Write("<li>你输入的内容:Text" + i + " = " + Request.Form["Text" + i] + " Select" + i + " = " + Request.Form["Select" + i]);
          }
        }
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <script>
        var num = 0;
        function Add() {
          d1 = document.createElement("input")
          d1.name = "Text" + num;
          d2 = document.createElement("select")
          d2.name = "Select" + num;
          d2.options[d2.options.length] = new Option("1", "A")
          d2.options[d2.options.length] = new Option("2", "B")
          d2.options[d2.options.length] = new Option("3", "X")
          document.getElementById("a").appendChild(d1)
          document.getElementById("a").appendChild(d2)
          document.getElementById("a").appendChild(document.createElement("br"));      document.getElementById("count").value = num;
          num++;
        }
      </script>
    </head>
    <body>
      <form id="Form1" runat="server">
      <input name="count" id="count" type="hidden" value="0" />
      <input type="button" value="添加" onclick="Add()" />
      <div id="a"></div>
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="查询" />
      </form>
    </body>
      

  8.   

    这个关键是生成的控件里面有一个联动的问题,添加HTML控件我知道的
      

  9.   

    DropDownList ddl = new DropDownList();
      ddl.ID = "ph1";
      DropDownList DropDownList = new DropDownList();
      ddl.Items.Add(new ListItem("(指定しない)", ""));
    这种做法不太好,既然每次页面上都要显示,为什么不在ASPX中就放置好,在后台只需要绑定数据就行了(或者控制显示/隐藏)。没必要每次都在服务端动态的new()
    如果你实在要这么做,建议移到Page_Init事件中