簡體   English   中英

回發后如何獲得動態控件的值?

[英]How Do I Get a Dynamic Control's Value after Postback?

我有一個在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時進行數據綁定,則無法在postback上找到動態控件。 如果我每次頁面加載時都進行綁定,則我的靜態字段將設置為其默認文本。

嘗試將ListView的數據綁定移到OnInit()事件中。

非常類似的問題 (而不是由家伙生成一個按鈕來填充ListView)。 簡要地說,您會發現必須將這些項目存儲在Viestate中的列表中-而不是在Postback上將其捕獲並重新填充列表。

請注意,此解決方案意味着刪除數據綁定(出於其他原因,您可能不想這樣做)。

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM