我有一个 ASP.net 表,我在运行时动态添加表行和单元格,并向这些单元格添加控件(文本框和标签)。我在 OnInit 事件中创建和填充这些控件,希望它们会自动保存到视图状态。但他们不是!在每次回发时,表都会重置并显示为空。
我阅读了许多解决方案,例如将控件保存在 Cache 或 Session 中,或者手动添加它们以查看状态并手动保存它们的值以查看状态,但我想要一个直截了当的解决方案。就像当你拖放任何 asp.net 组件时,你忘记了维护它的状态。
谢谢
我有一个 ASP.net 表,我在运行时动态添加表行和单元格,并向这些单元格添加控件(文本框和标签)。我在 OnInit 事件中创建和填充这些控件,希望它们会自动保存到视图状态。但他们不是!在每次回发时,表都会重置并显示为空。
我阅读了许多解决方案,例如将控件保存在 Cache 或 Session 中,或者手动添加它们以查看状态并手动保存它们的值以查看状态,但我想要一个直截了当的解决方案。就像当你拖放任何 asp.net 组件时,你忘记了维护它的状态。
谢谢
您每次都必须重建表。尝试在 Page_Load 事件上创建行和单元格。我假设您有一个 asp:table 服务器端控件,例如:
<asp:Table ID="table" runat="server" />
在这种情况下,您可以在 Page_Load 上向其添加控件并为其设置值,例如:
protected void Page_Load(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);
}
你可以试试它是否有效?
正如 tranceporter 所建议的,您每次都必须添加表格控件。但是,如果您想在回发之间保持视图状态,那么您需要在 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 框架将在页面 Init 和 Load 事件触发之前为您将视图状态应用于控件。有关 ASP.NET 页面生命周期的更多详细信息,请参见此处:
http://msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx