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

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

Ответы [ 2 ]

2 голосов
/ 16 ноября 2009

Попробуйте переместить привязку данных ListView в событие OnInit ().

0 голосов
/ 16 ноября 2009

Очень похожий вопрос (вместо заполнения ListView парень генерирует набор кнопок). Вкратце, вы обнаружите, что вам нужно хранить элементы в списке в вашем Viestate - затем выложить его на Postback и заново заполнить список.

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

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

...