Найти контроль в классе - не могу найти контроль - PullRequest
2 голосов
/ 04 июля 2011

У меня есть страница aspx с контейнером вкладок ajax. В классе я хочу найти контейнер вкладок для передачи некоторых значений.

Я определяю myPage:

Page myPage = (Page)HttpContext.Current.Handler;

При поиске более подробной информации об этом myPage, нажав на кнопку add watch, он отображает контейнер с вкладками, который я ищу. Однако, когда я определяю свой контейнер вкладок

AjaxControlToolkit.TabContainer Workflow_TabContainer = null;
Workflow_TabContainer = 
         (AjaxControlToolkit.TabContainer)myPage.FindControl("Workflow_TabContainer")
         as AjaxControlToolkit.TabContainer;

или

AjaxControlToolkit.TabContainer Workflow_TabContainer 
        (AjaxControlToolkit.TabContainer)myPage.FindControl("Workflow_TabContainer");

не находит контейнер вкладок. Я также попытался сначала определить страницу, чем ContentPlaceholder и искал контейнер вкладок в заполнителе. Та же проблема.

Любая помощь и / или подсказка очень ценится.

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Метод FindControl ищет в текущем элементе управления только дочерние элементы.

Если вы не знаете, где в иерархии страниц находятся элементы управления, вам потребуется выполнить рекурсивный поиск, которыйвероятно, если вы используете шаблонный элемент управления, такой как TabContainer.

Как я уже писал ранее на аналогичный ответ :

private Control FindControlRecursive(Control rootControl, string controlID)
{
  if (rootControl.ID == controlID) {
    return rootControl;
  }

  foreach (Control controlToSearch in rootControl.Controls)
  {
    Control controlToReturn = 
      FindControlRecursive(controlToSearch, controlID);
    if (controlToReturn != null) { 
      return controlToReturn;
    }
  }

  return null;
}

Как только выЕсли у вас есть контроль, вы должны разыграть его, используя as, а затем проверить на ноль на случай, если это не совсем то, что вы ожидали:

var tabContainer = FindControlRecursively(myPage, "Workflow_TabContainer")
                 as AjaxControlToolkit.TabContainer

if (null != tabContainer) {
  // Do Stuff
}
0 голосов
/ 04 июля 2011

если элемент управления находится на той же странице, вы можете получить прямой доступ к элементу управления.Посмотрите на ниже:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=178

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...