添加多个DropDownLists通过单击按钮(Adding multiple DropDownLi

2019-09-18 04:13发布

使用ASP.NET的结合(用C#)和jQuery,我尝试创建DropDownList s的一个按钮。 这些DropDownList旨意与SQL查询来填充。

我在遇到困难的部分是只用按一下按钮添加多个。

如果用户点击该按钮5次,5更DropDownList应创建S和填充有相同的数据。 理想情况下,每一个DropDownList被包含在一个表中的一个新行,或以类似的方式进行组织。

我不想做在JavaScript中的任何SQL连接。 与此有什么建议?

编辑:

我已经尝试使用一个<asp:PlaceHolder> ,和然后使用该添加DropDownList 。 我无法弄清楚如何使用此方法,并添加多个,虽然:

<asp:PlaceHolder ID="PlaceHolder1" runat="server"/>

protected void Add_Dropdownlist()
{
   DropDownList DropDownList1 = new DropDownList();
   PlaceHolder1.Controls.Add(DropDownList1);
}

我已经使用jQuery复制原始尝试DropDownList 。 我的问题是,是,我无法弄清楚如何让原来DropDownList从jQuery的,如果它是一个<asp:DropDownList> 。 如果我把它改为<select>相反,我无法弄清楚如何从ASP(服务器)端SQL数据填充它。

<select id="DropDownList1">
  <option value="-1"></option>
</select>

<asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList>

function copy_Dropdownlist()
{
  newDropdownlist = jQuey.extend({}, DropDownList2);
}

总之,我已经走了下来几条路径,但我不认为任何人都正确。 我是新来ASP.NET(谷歌教育),我认为问题在于连接客户端jQuery和服务器端ASP.NET。 谢谢您的帮助。

Answer 1:

(这是关于你<asp:PlaceHolder> 。做法实际上,我想使用<asp:Panel> ,因为它似乎更适合这里)

它看起来像你正在运行到问题是DropDownList s的不是在回发持续。 所以,每次创建一个新的,并把它添加到你的时间PlaceHolder ,你仍然只是一个结束。

要解决这个问题,你需要跟踪你已经创建的那些的。 在你Page_Load ,您想为您的存储容器DropDownList S(我用一个List<>此),并将其保存在用户的“ Session ”。 请注意!Page.IsPostBack ; 您只需要一次创建这个(首次加载页面,你不回发每次):

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        List<DropDownList> DDLList = new List<DropDownList>();
        Session["DDLs"] = DDLList;
    }
}

现在,当你按一下按钮,就可以

  • 获取现有DropDownList S(如果有的话)从您的Session变量,
  • 添加新的一个此按钮点击该列表
  • 您的所有添加DropDownList年代到Panel
  • 再换保存更新列表,您的Session变量。

像这样:

protected void Button1_Click(object sender, EventArgs e)
{
    DropDownList newDropDown = new DropDownList();
    List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
    existingDropDowns.Add(newDropDown);

    foreach (DropDownList dropdown in existingDropDowns)
    {
        Panel1.Controls.Add(dropdown);
    }

    Session["DDLs"] = existingDropDowns;
}

我不知道你要完成什么,但是这会告诉你如何开始。



Answer 2:

@ jadarnel27

非常感谢您的帮助,这让我的地方,我需要去。 我不得不做一点更多的工作来处理后回选择更改。 以下是我结束了。

protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
      List<DropDownList> DDLList = new List<DropDownList>();
      Session["DDLs"] = DDLList;
  }
  else
  {
    List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
    //Add all existing DropDownLists to Panel
    foreach (DropDownList dropdown in existingDropDowns)
    {
      Panel1.Controls.Add(dropdown);
      dropdown.AutoPostBack=true;
      Panel1.Controls.Add(new LiteralControl("<br/>"));
    }
    Session["DDLs"] = existingDropDowns;
  }
}

protected void Button_Click(Object sender, EventArgs e) 
{
  List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
  DropDownList newDropDown = new DropDownList();        
  newDropDown.ID = "DDL" + existingDropDowns.Count.ToString();
  //Bind DropDownList to SQL Table
  Populate_List("mySQLTable", newDropDown, "");
  existingDropDowns.Add(newDropDown);
  //Add only new DropDownList to Panel
  Panel1.Controls.Add(newDropDown);
  newDropDown.AutoPostBack=true;
  Panel1.Controls.Add(new LiteralControl("<br/>"));
  Session["DDLs"] = existingDropDowns;
}

protected void clickSubmit(Object sender, EventArgs e)
{
  List<DropDownList> existingDropDowns = (List<DropDownList>)Session["DDLs"];
  foreach (DropDownList dropdown in existingDropDowns)
  {
      //Insert each DropDownList selected value into SQL Table
      ETS.Core.Db.Database.ExecuteNoLog("INSERT INTO myNewTable (id,text) VALUES ('" + dropdown.SelectedValue + "', '" + dropdown.SelectedItem  + "')");
  }
}

再次感谢。



文章来源: Adding multiple DropDownLists with a button click