簡體   English   中英

ASP.NET-動態訪問控件

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

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