我有一个列表视图,增加了控制在ItemDataBound事件。当发生回发,我找不到新的控件。一些研究之后,我发现,ASP .NET创建需要每次这些控件,甚至回传后。从那里,我搬到功能到ListView绑定if (!Page.IsPostBack)条件之外。现在我得到的动态控制值,但我已经被设置为默认值的静态控件。这里是什么,我试图完成一个样本:

为简单起见,我留下了一些明显的事情出本实施例的

<asp:ListView runat="server" ID="MyList" OnItemDataBound="MyList_ItemDataBound">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
    </LayoutTemplate>

    <ItemTemplate>
        <asp:PlaceHolder runat="server" ID="ProductPlaceHolder">
            <asp:TextBox runat="server" ID="StaticField" Text="DefaultText" />
            <asp:PlaceHolder ID="DynamicItems" runat="server" />
        </asp:PlaceHolder>           
    </ItemTemplate>
</asp:ListView>

和这里是代码隐藏:

protected void MyList_ItemDataBound(object sender, System.Web.UI.WebControls.ListViewItemEventArgs e) {
    PlaceHolder DynamicItems = (PlaceHolder)e.Item.FindControl("DynamicItems");
    DynamicItems.Controls.Add(textbox);
}

所以,就像我说的,如果我只当数据绑定然后Page != PostBack我找不到上回发我的动态控制。如果我每次都绑定页面加载,然后我的静态字段将会设置为默认文本。

有帮助吗?

解决方案

尝试数据ListView中的结合移动到的OnInit()事件。

其他提示

非常类似的问题 (而不是填充一个ListView的人正在产生一组按钮)。简单地说,你会发现,你必须存储在您的Viestate列表中的项目 - 比鱼出来的回发和重新填充列表。

请注意,这种解决方案意味着丢弃数据绑定(您可能不想为别人做的原因)。

希望它能帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top