1

我正在尝试为要添加到表中的每个文本框添加一个唯一名称。

我试过了:

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以我的名字运行 a 时,我得到一个空引用,即使它仍然可以通过自动生成的名称找到它。

我需要做什么才能通过我的名字找到控件?何时/为什么为我的控件自动生成名称?

成功代码:

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

不成功的代码:

文本框 tb = (TextBox)FindControl(myId);
WriteToSomeOtherDiv(tb.Text);

4

2 回答 2

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,而不是名称。

于 2010-08-10T22:35:38.757 回答
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();
    }
}
于 2010-08-10T22:59:05.620 回答