我想添加一个独特的名字,各文本,我加入到表。

我已经试过:

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, 通过我的名字,我得到一个空基准,即使它仍然有效,找到它通过自动生成的名称。

我需要做什么做找到控制通过我的名字?在/为什么autogenerating名字对我的控制?

成功的代码:

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

不成功的代码:

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

有帮助吗?

解决方案

这取决于哪个版本的ASP.Net.历史上,没有控制身份证和名称的控制。在ASP.Net 4.0,这种改变。你可以控制的Id呈现。为什么不使用这种特征,而不是?

这是一篇文章上的新的特征。净4.0: http://www.dotnetfunda.com/articles/article893-control-over-client-ids--aspnet-40-.aspx

是有一个原因是针对该名称属性?

如果您使用的是旧版本(3.5)这并不是那么容易。FindControl只是看起来的id的控制,不名。

其他提示

就像您长得需要放在一个占位符,您的控件并找到占位符,而不是形式控制。请参阅下面的删除和添加自定义的控制和动态控制,你需要先找到控制之前,你可以用它进行交互的例子。对于一个完整的解释,我把它在我的博客 - >的 http://anyrest.wordpress.com/2010/04/06/dynamically-removing-controls-in-a-parent-page-from-a-child-控制/ 。让我知道,如果这个解决您的问题。

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();
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top