4

我有一个 ASP.net 表,我在运行时动态添加表行和单元格,并向这些单元格添加控件(文本框和标签)。我在 OnInit 事件中创建和填充这些控件,希望它们会自动保存到视图状态。但他们不是!在每次回发时,表都会重置并显示为空。

我阅读了许多解决方案,例如将控件保存在 Cache 或 Session 中,或者手动添加它们以查看状态并手动保存它们的值以查看状态,但我想要一个直截了当的解决方案。就像当你拖放任何 asp.net 组件时,你忘记了维护它的状态。

谢谢

4

2 回答 2

1

您每次都必须重建表。尝试在 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);
    }

你可以试试它是否有效?

于 2012-08-31T16:06:01.320 回答
0

正如 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

于 2012-08-31T16:13:10.330 回答