2010-08-10 86 views
1

我想添加一個唯一的名稱,我添加到表中的每個文本框。如何命名和查找在c#中動態創建的webcontrols

我已經試過:

TableRow someRow = new TableRow(); 
TableCell someCell = new TableCell(); 
TextBox someTextbox = new TextBox(); 

someTextbox.Attributes.Remove("name"); 
someTextbox.Attributes.Add("name",itsId); 

someCell.Controls.Add(someTextBox); 
someRow.Cells.Add(someCell); 
theTable.Rows.Add(someRow); 

的HTML生成包括我的名字,並自動生成的名稱作爲文本框的屬性。

不幸的是,當我使用我的名字運行FindControl時,我得到一個空引用,儘管它仍然可以通過自動生成的名稱找到它。

我需要做什麼才能找到我的名字控制?何時/爲什麼它爲我的控件自動生成名稱?

成功代碼:

TextBox tb = (TextBox)FindControl(autogeneratedID); 
WriteToSomeOtherDiv(tb.Text); 

不成功代碼:

TextBox tb = (TextBox)FindControl(myId); 
WriteToSomeOtherDiv(tb.Text); 

+0

你可以發佈代碼 - 無論是失敗和成功案例。 – ChrisF 2010-08-10 22:32:40

回答

1

這取決於ASP.Net的什麼版本。從歷史上看,您無法控制Id的名稱和控件的名稱。在ASP.Net 4.0中,這改變了。您可以控制如何呈現Id。爲什麼不用這個功能呢?

這裏是在.NET 4.0中的新功能的文章:http://www.dotnetfunda.com/articles/article893-control-over-client-ids--aspnet-40-.aspx

是否有你的目標名稱屬性的原因是什麼?

如果您使用的是舊版本(3.5),這並不容易。 FindControl只查找控件的id,而不是名稱。

+0

當我通過使用attributes.add(「id」,itsId)來設置id時,它不起作用。 但是,設置someTextBox.ID = itsId確實有效,並且在生成的html中,「name」屬性獲得與名稱相同的值。 – scott 2010-08-10 23:00:05

0

看起來您需要將控件放置在佔位符上,並在佔位符而不是窗體上找到該控件。有關刪除和添加自定義控件和動態控件的信息,請參閱下面的示例,您需要首先找到該控件,然後才能與之交互。對於完整的解釋,我在我的博客 - >http://anyrest.wordpress.com/2010/04/06/dynamically-removing-controls-in-a-parent-page-from-a-child-control/。讓我知道這是否解決了你的問題。

public UserControl myCustomControl = new UserControl(); 
public Button myDynamicButton = new Button(); 

protected void btnAddControl_Click(object sender, EventArgs e) 
{ 
    myCustomControl = (UserControl)Page.LoadControl("SampleControlToLoad.ascx"); 
    PlaceHolder myPlaceHolder = (PlaceHolder)Page.FindControl("PlaceHolder1"); 

    myPlaceHolder.Controls.Add(myCustomControl); 
} 
protected void btnRemoveControl_Click(object sender, EventArgs e) 
{ 
    PlaceHolder myPlaceHolder = (PlaceHolder)Page.FindControl("PlaceHolder1"); 
    if (myPlaceHolder.Controls.Contains(myCustomControl)) 
    { 
     myPlaceHolder.Controls.Remove(myCustomControl); 
     myDynamicButton.Dispose(); 
    } 
} 
相關問題