Как назвать и найти динамически созданные веб-элементы управления в C # - PullRequest
1 голос
/ 11 августа 2010

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

Я пробовал:

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);

Ответы [ 2 ]

1 голос
/ 11 августа 2010

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

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

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

0 голосов
/ 11 августа 2010

Похоже, вам нужно поместить элементы управления на заполнитель и найти этот элемент управления вместо заполнителя.Ниже приведен пример удаления и добавления пользовательских элементов управления и динамических элементов управления, где вам необходимо сначала найти элемент управления, прежде чем вы сможете с ним работать.Для полного объяснения у меня есть это в моем блоге -> 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...