[英]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.