2012-06-15 61 views
2

使用ASP.NET(使用C#)和jQuery的组合,我尝试使用按钮创建DropDownList。这些DropDownList将填充一个SQL查询。用按钮单击添加多个DropDownLists

我遇到困难的部分是仅使用按钮单击添加多个部分。

如果用户点击5次按钮,应该创建5个以上的DropDownList,并填充相同的数据。理想情况下,每个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尝试。我遇到的问题是,如果它是<asp:DropDownList>,我无法弄清楚如何从jQuery获取原始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。谢谢您的帮助。

+2

请提供您已经尝试过的东西。 – Steeven

回答

1

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

它看起来像你正在运行到的问题是,DropDownList小号不会在回发期间持续存在。所以,每次你创建一个新的并将其添加到你的PlaceHolder,你仍然只有一个。

要解决这个问题,你需要跟踪你已经创建的。在您的Page_Load中,您希望为您的DropDownList创建一个存储容器(为此,我使用List<>),并将其保存在用户的“Session”中。请注意0​​;您只需要一次创建这个(首次加载页面,而不是每次回发):

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

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

  • 获取现有DropDownList小号(如果有的话)从Session变量,
  • 此按钮点击添加新的一个到该列表
  • 所有DropDownList S的添加对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; 
} 

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

+1

感谢您的帮助。 –

+0

@GregMaslin很高兴我能帮忙=) – jadarnel27

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

再次感谢。