我已经通过代码隐藏将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);
答案 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
以下是使用动态控件的替代方法