Как мне получить значение динамического элемента управления после обратной передачи?
-
20-09-2019 - |
Вопрос
У меня есть listview, который добавляет элементы управления в событие 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, а не извлекать их при обратной отправке и повторно заполнять список.
Обратите внимание, что это решение подразумевает отказ от привязки к данным (чего вы, возможно, не захотите делать по другим причинам).
Надеюсь, это поможет.