在表中动态添加下拉列表的问题(C#)

时间:2011-09-19 06:10:12

标签: c# asp.net

我正在做一个非常简单的任务,但我一度陷入困境。我想创建一个简单的页面(带有C#的ASP.NET),它最初显示一个按钮。当用户单击该按钮时,应该动态地向页面添加下拉列表。我通过C#这样做。我的问题是列表第一次被添加到页面,但之后只有页面刷新,不再添加列表。我不知道最近发生了什么。这是我的代码:

Default.aspx的

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master"  AutoEventWireup="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>
    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    </asp:Content>
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>Welcome to My Store!</h2>

    <table id="itempanel" runat="server"></table>
    <asp:Button ID="additem" Text="Add" OnClick="addElement" runat="server" />

    </asp:Content>

Default.aspx.cs

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void addElement(object sender, EventArgs e)
{
    HtmlTableRow tr=new HtmlTableRow();
    HtmlTableCell tc = new HtmlTableCell();
    DropDownList mylist = new DropDownList();
    ListItem myitem = new ListItem("Item1");
    mylist.Items.Add(myitem);
    myitem = new ListItem("Item2");
    mylist.Items.Add(myitem);
    myitem = new ListItem("Item3");
    mylist.Items.Add(myitem);
    tc.Controls.Add(mylist);
    tr.Cells.Add(tc);
    itempanel.Rows.Add(tr);
  }
}

3 个答案:

答案 0 :(得分:2)

发生回发时,需要重新添加动态添加的控件。

一种简单的方法是在Load事件和设置中添加相同的代码

    if(postback)
        {
      //your control adding code goes here... so when it is postback load event will add                   

      the control again. Other way is add the control through another method... 

          }

另一件事......通常我们在Page lifecycle Pre_Init方法中添加控件。了解一下。

更新

我忘记提到您还可以在视图状态下保存数据的状态。您将不得不重新创建回发控件,无论如何,但如果数据已更改,可以从viewstate返回,如果您已将其保存在那里。怎么做,如下所示。 http://chiragrdarji.wordpress.com/2009/05/20/maintain-viewstate-for-dynamic-controls-across-the-postback/

答案 1 :(得分:1)

您需要学习 ASP.NET page life cycle。 (每当请求页面时,将实例化所有控件和页面对象)。有很多方法可以这样做,但我认为最简单的方法是使用JavaScriptjQuery

但是,您可以使用现有代码

来实现结果
protected void Page_Load(object sender, EventArgs e)
{
  if(ViewState["isButtonClicked"]!=null) 
   {
        AddDropDown();
   }
}

protected void addElement(object sender, EventArgs e)
{
   if(ViewState["isButtonClicked"]==null)
     {
       AddDropDown();
     }
    ViewState["isButtonClicked"]="yes";

}

void AddDropDown()
{
    HtmlTableRow tr=new HtmlTableRow();
    HtmlTableCell tc = new HtmlTableCell();
    DropDownList mylist = new DropDownList();
    ListItem myitem = new ListItem("Item1");
    mylist.Items.Add(myitem);
    myitem = new ListItem("Item2");
    mylist.Items.Add(myitem);
    myitem = new ListItem("Item3");
    mylist.Items.Add(myitem);
    tc.Controls.Add(mylist);
    tr.Cells.Add(tc);
    itempanel.Rows.Add(tr);
}

答案 2 :(得分:1)

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
   {
       AddDropDown();
   }
}