2

结合使用 ASP.NET(使用 C#)和 jQuery,我尝试DropDownList使用按钮创建 s。这些DropDownLists 将使用 SQL 查询进行填充。

我遇到困难的部分是只需单击按钮即可添加多个。

如果用户单击该按钮 5 次,DropDownList则应该再创建 5 个并填充相同的数据。理想情况下,每个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如果它是<asp:DropDownList>. 如果我将其更改为 a <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。谢谢您的帮助。

4

2 回答 2

1

(这是参考您的<asp:PlaceHolder>方法。我实际上将使用 an <asp:Panel>,因为这里似乎更合适)

看起来您遇到的问题是DropDownLists 不会在回发中持续存在。因此,每次您创建一个新的并将其添加到您的PlaceHolder中时,您仍然只会得到一个。

要解决此问题,您需要跟踪已创建的那些。在您的 sPage_Load中,您想为您DropDownList的 s 创建一个存储容器(我List<>为此使用 a)并将其保存在用户的“ 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
  • 为该按钮添加新的单击到该列表
  • 将您的所有DropDownLists 添加到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;
}

我不确切知道您要完成什么,但这应该可以帮助您入门。

于 2012-06-15T14:54:11.883 回答
0

@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  + "')");
  }
}

再次感谢。

于 2012-06-15T20:19:37.240 回答