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

本文关键字:问题 下拉列表 动态 添加 | 更新日期: 2023-09-27 18:09:11

我正在做一个非常简单的任务,但我在一个点卡住了。我想创建一个简单的页面(ASP。NET和c#),它最初显示一个按钮。当用户点击按钮时,一个下拉列表应该动态地添加到页面上。我是通过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);
  }
}

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

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

一种简单的方法是将相同的代码放在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... 
          }

的另一件事……通常我们在页面生命周期Pre_Init方法中添加控件。也读一下这个。

更新

我忘了说,您还可以在viewstate中保存数据的状态。无论如何,您都必须在回发时重新创建控件,但是如果数据发生了更改,则可以从viewstate中检索到保存在那里的数据。如何做到这一点,如下所示。http://chiragrdarji.wordpress.com/2009/05/20/maintain-viewstate-for-dynamic-controls-across-the-postback/

你需要学习 ASP。净 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);
}
protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
   {
       AddDropDown();
   }
}