У меня есть просмотр списка, который добавляет элементы управления в событие 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
, я не могу найти свои динамические элементы управления при обратной передаче. Если я связываюсь каждый раз, когда загружается страница, мои статические поля устанавливаются в текст по умолчанию.