[英]ASP.NET - Dynamically Accessing Controls
我在ASPX頁面上具有以下控件:
<asp:TextBox ID="txtISBN13" runat="server" ClientIDMode="Static" />
我需要訪問此元素而無需明確引用它。 因為該控件在Page_Load事件期間尚不存在,所以我必須在頁面生命周期的稍后時間訪問它。
我已經嘗試覆蓋OnUnload事件,因為這是最后一個事件,但是我仍然無法通過以下方式訪問控件:
Control c = new Control();
c.FindControl("txtISBN13");
要么:
Control c = Page.FindControl("txtISBN13");
我是否要覆蓋不正確的事件? ClientIDMode與我搞混了嗎? 即使我在按鈕單擊事件上嘗試類似的代碼,也沒有運氣。 我是否需要某種遞歸的FindControl? 我應該使用Page.FindControl還是Control.FindControl?
對於這種情況,我無法執行以下操作:
this.txtISBN13.Text = "Foo";
相反,我有一個DataColumn(previousValue),我需要找到該控件並設置它的值。 我正在努力:
string pendingID = String.Format("txt{0}", previousValue.ColumnName);
TextBox txt = new TextBox();
txt.ID = pendingID;
txt.Text = "Foo";
假設輸入位於某種容器(PlaceHolder,Panel等)中,則您應該能夠執行以下操作:
標記:
<asp:PlaceHolder ID="PlaceHolder1" runat="server">
<asp:TextBox ID="txtISBN1" runat="server" />
<asp:TextBox ID="txtISBN2" runat="server" />
....
<asp:TextBox ID="txtISBN13" runat="server" />
</asp:PlaceHolder>
后台代碼:
TextBox txt = PlaceHolder1.Controls.OfType<TextBox>().FirstOrDefault(x => x.ID.ToUpper().Contains("ISBN13"));
if (txt != null)
{
txt.Text = row.Field<string>("ISBN13");
}
您的控件位於哪個容器中? 您需要調用containingControl.FindControl("txtISBN13")
,或在Page.Controls
- C#,FindControl中進行遞歸搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.