我正在做一个非常简单的任务,但我一度陷入困境。我想创建一个简单的页面(带有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);
}
}
答案 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
。 (每当请求页面时,将实例化所有控件和页面对象)。有很多方法可以这样做,但我认为最简单的方法是使用JavaScript
或jQuery
。
但是,您可以使用现有代码
来实现结果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();
}
}