Как назвать и найти динамически созданные WebControls в C #

StackOverflow https://stackoverflow.com/questions/3453989

Вопрос

Я пытаюсь добавить уникальное имя каждому текстовому поле, которое я добавляю в таблицу.

Я пробовал:

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 включает в себя как мое имя, так и имя автогенерации в качестве атрибутов TextBox.

К сожалению, когда я бегу FindControl, По моему имени я получаю нулевую ссылку, хотя он все еще работает, чтобы найти его с помощью автогенерации.

Что мне нужно сделать, чтобы найти контроль по мнению моего имени? Когда / почему это аутогенерационные имена для моих контролей?

Успешный код:

TextBox TB = (TextBox) FindControl (AutogeneratedId); WriteTosomeotherDiv (TB.Text);

Неудачный код:

TextBox TB = (TextBox) FindControl (MyID); WriteTosomeotherDiv (TB.Text);

Это было полезно?

Решение

Это зависит от какой версии ASP.NET. Исторически у вас не было контроля над идентификаторами и именами контроля. В ASP.NET 4.0 это изменилось. Вы можете контролировать, как отображаются идентификаторы. Почему бы не использовать эту функцию вместо этого?

Вот статья о новой функции в .NET 4.0: http://www.dotnetfunda.com/articles/article893-control-over-client-ids-ASPnet-40-.aspx.

Есть ли причина, по которой вы нацелены на атрибут имени?

Если вы используете старую версию (3.5), это не так просто. FindControl только ищет идентификатор управления, а не имя.

Другие советы

Похоже, вам нужно разместить свой контроль на заполнителе и найти этот контроль на заполнителе, а не в форме. Пожалуйста, смотрите пример ниже при удалении и добавлении пользовательских элементов управления и динамических элементов управления, где вам нужно сначала найти элемент управления, прежде чем вы сможете взаимодействовать с ним. Для полного объяснения у меня есть в моем блоге -> http://anyerest.wordpress.com/2010/04/06/dynamially-removing-controls-in-a-carent-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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top