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
は、ポストバックで動的コントロールを見つけることができません。ページが読み込まれるたびにバインドすると、静的フィールドがデフォルトのテキストに設定されます。