我正在做一个非常简单的任务,但我卡在了一点。我想创建一个简单的页面(带有 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);
}
}
最佳答案
动态添加的控件需要在回发时重新添加。
一种简单的方法是将相同的代码放入 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 方法中添加控件。也阅读相关内容。
更新
我忘了提一下,您还可以在 View 状态中保存数据状态。无论如何,您都必须在回发时重新创建控件,但是如果数据已更改,如果您已将其保存在那里,则可以从 View 状态中检索回来。如何做到这一点,如下所示。 http://chiragrdarji.wordpress.com/2009/05/20/maintain-viewstate-for-dynamic-controls-across-the-postback/
关于c# - 在表中动态添加下拉列表的问题(C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7467056/