繁体   English   中英

在动态向该表添加行后,为什么我的HTML表行会丢失视图状态?

[英]Why does my HTML table row loses view state after dynamically adding rows to this table?

我有一个简单的HTML表格,如下所示:

<table id="table" runat="server">
    <tr>
        <td>
            <asp:Label runat="server" Text="Column1" />
        </td>
    </tr>
    <tr id="tr_someId" runat="server">
        <td>
            <asp:Label ID="lb_someId" runat="server" />
        </td>
    </tr>
</table>

在每个请求中,我rowIdx = 1 )现有行之间添加动态行例如:

protected override void OnLoad( EventArgs e )
{
    base.OnLoad( e );

    if( !IsPostBack )
    {
        lb_someId.Text = "Some text";
    }

    int rowIdx = 1;

    foreach( ISomething something in GetSomethings() )
    {
        HtmlTableRow tr = new HtmlTableRow();
        tr.Cells.Add( CreateLabelCell( something ) );

        table.Rows.Insert( rowIdx++, tr );
    }
}

现在,我想知道为什么我的lb_someId-Label在回发后丢失其文本? 我认为这不应该发生,因为它是固定控件。 当我注释表时,它不会丢失其文本table.Rows.Insert( rowIdx++, tr ); 线路输出。

先感谢您!

标签值丢失的原因是因为它是表的一部分,在OnLoad事件中向该表添加了新行。 在生命周期的这一点上,不再跟踪动态添加的控件。 该表将整体跟踪其视图状态,包括有关标签的一些信息。 如果标签在桌子外面,那不会有问题。 请参见MSDN:了解ASP.NET视图状态

将代码移至OnInit

protected override void OnInit(EventArgs e)
{   
    base.OnInit(e);

    if( !IsPostBack )
    {
        lb_someId.Text = "Some text";
    }

    int rowIdx = 1;

    foreach( ISomething something in GetSomethings() )
    {
        HtmlTableRow tr = new HtmlTableRow();
        tr.Cells.Add( CreateLabelCell( something ) );

        table.Rows.Insert( rowIdx++, tr );
    }
}

或者,仅将foreach循环移动到OnInit就足够了。

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    if( !IsPostBack )
    {
        lb_someId.Text = "Some text";
    }
}

protected override void OnInit(EventArgs e)
{   
    base.OnInit(e);

    int rowIdx = 1;

    foreach( ISomething something in GetSomethings() )
    {
        HtmlTableRow tr = new HtmlTableRow();
        tr.Cells.Add( new HtmlTableCell { InnerText = something } );

        table.Rows.Insert( rowIdx++, tr );
    } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM