首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我的HTML表行在向该表动态添加行后会丢失视图状态?

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

Stack Overflow用户
提问于 2018-06-11 21:58:14
回答 1查看 142关注 0票数 0

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

代码语言:javascript
复制
<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)之间添加动态行现有行,如下所示:

代码语言:javascript
复制
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在PostBack上丢失了它的文本?我认为这不应该发生,因为这是一个固定的控制。当我注释掉table.Rows.Insert( rowIdx++, tr );行时,它不会丢失文本。

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 05:22:08

标签的值丢失的原因是因为它是在OnLoad事件中添加新行的表的一部分。在生命周期的这一点上,动态添加的控件不再被跟踪。该表作为一个整体跟踪其视图状态,包括有关标签的一些信息。如果标签在表之外,就不会有问题。参见MSDN: Understanding ASP.NET View State

将代码移动到OnInit

代码语言:javascript
复制
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即可。

代码语言:javascript
复制
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 );
    } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50799472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档