C# 向ASP.net表中添加和维护表行和单元格
我有一个ASP.net表,在运行时动态地向其中添加表、行和单元格,并向这些单元格添加控件(文本框和标签)。我在OnInit活动中创建并填充这些控件,希望它们能自动保存到view sate中。但事实并非如此!每次回发时,表都会重置并显示为空 我读过很多解决方案,比如将控件保存在缓存或会话中,或者手动将它们添加到视图状态,并手动将它们的值保存到视图状态,但我想要一个简单的解决方案。就像当你拖放任何asp.net组件时,你忘记了维护它的状态C# 向ASP.net表中添加和维护表行和单元格,c#,asp.net,viewstate,asp.net-4.0,C#,Asp.net,Viewstate,Asp.net 4.0,我有一个ASP.net表,在运行时动态地向其中添加表、行和单元格,并向这些单元格添加控件(文本框和标签)。我在OnInit活动中创建并填充这些控件,希望它们能自动保存到view sate中。但事实并非如此!每次回发时,表都会重置并显示为空 我读过很多解决方案,比如将控件保存在缓存或会话中,或者手动将它们添加到视图状态,并手动将它们的值保存到视图状态,但我想要一个简单的解决方案。就像当你拖放任何asp.net组件时,你忘记了维护它的状态 谢谢您每次都必须重建表。尝试在页面加载事件上创建行和单元格。
谢谢您每次都必须重建表。尝试在页面加载事件上创建行和单元格。我假设您有一个asp:table服务器端控件,如:
<asp:Table ID="table" runat="server" />
如果行得通,你能试试吗 正如tranceporter所建议的,您每次都必须添加表控件。但是,如果希望在回发之间保持viewstate,则需要在PreInit事件中重新生成表,例如
protected void Page_PreInit(object sender, EventArgs e)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new TextBox());
row.Cells.Add(cell);
table.Rows.Add(row);
}
如果控件是在PreInit事件中创建的,则ASP.NET framework将在触发页面初始化和加载事件之前为您将viewstate应用于控件。有关ASP.NET页面生命周期的更多详细信息,请参见此处:
您必须使用.NET表格和文本框吗?也许你可以添加html-form-controls。什么会导致回发?点击按钮?我感觉到了你的痛苦,愚蠢的网络表单?!MVC是我未来的朋友。。。
protected void Page_PreInit(object sender, EventArgs e)
{
TableRow row = new TableRow();
TableCell cell = new TableCell();
cell.Controls.Add(new TextBox());
row.Cells.Add(cell);
table.Rows.Add(row);
}