我有一个在 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
那么我在回发时找不到我的动态控件。如果我每次加载页面时都绑定,那么我的静态字段将设置为其默认文本。