在Postback上动态添加不在Rows集合中的TableRows

时间:2012-01-07 16:45:50

标签: c# asp.net webforms

我已经通过代码隐藏将TableRows添加到表中。行在页面上呈现,但在PostBack上,行不再是集合的一部分。让这些行保持不变以便我可以在PostBack上使用它们的诀窍是什么?

的.ascx

<asp:Table id="OrderItemsTable" runat="server">

.ascx.cs

TableRow itemRow = new TableRow();

// Ticket Quantity
TableCell cell1 = new TableCell();
cell1.Attributes.Add("align", "center");
TextBox ticket1QuantityTextBox = new TextBox();
ticket1QuantityTextBox.Width = Unit.Pixel(30);
ticket1QuantityTextBox.MaxLength = 3;
ticket1QuantityTextBox.Attributes.Add("class", "OrderItemTicketQuantityTB");
ticket1QuantityTextBox.Text = item.Quantity.ToString();
cell1.Controls.Add(ticket1QuantityTextBox);
itemRow.Cells.Add(cell1);
...
OrderItemsTable.Rows.Add(itemRow);

2 个答案:

答案 0 :(得分:3)

您需要在Page_Init事件上构建动态控件。您是在Page_Load或其他地方做到这一点吗?如果它们的添加时间晚于Page_Init,则它们不会参与会导致问题的ViewState。

答案 1 :(得分:1)

是的,您需要在Page_Int事件中使用动态控件构造控件树,以便ASP.NET可以稍后将ViewState数据加载到Page Control树(您需要从TextBox访问值)

一方面,只有在控件类型是动态的时候才应该使用动态控件。否则,你可以使用Repeater和listview

来实现相同的目标

Truely Understanding Dynamic Controls

以下是使用动态控件的替代方法

ASP.NET: Alternatives to Dynamic Controls - Part 1