Как мне получить значение динамического элемента управления после обратной передачи?

StackOverflow https://stackoverflow.com/questions/1744101

Вопрос

У меня есть 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, а не извлекать их при обратной отправке и повторно заполнять список.

Обратите внимание, что это решение подразумевает отказ от привязки к данным (чего вы, возможно, не захотите делать по другим причинам).

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top