我怎么回发后动态控件值?
-
20-09-2019 - |
题
我有一个列表视图,增加了控制在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列表中的项目 - 比鱼出来的回发和重新填充列表。
请注意,这种解决方案意味着丢弃数据绑定(您可能不想为别人做的原因)。
希望它能帮助。
不隶属于 StackOverflow