FindControl не найдет мой динамически добавленный UserControl - PullRequest
2 голосов
/ 25 марта 2011

Я работаю над проектом, где страница загружает определенные элементы управления в зависимости от доступного индекса. Загрузка происходит при загрузке страницы, где вызывается метод PopulateSearchField.

В рамках этого метода все элементы UserControl добавляются на страницу с помощью: Page.LoadControl ("path");

Загрузка страницы и все необходимые элементы управления находятся на странице. Моя проблема заключается в том, что когда пользователь нажимает кнопку «Поиск», происходит событие, и запрос строится на основе пользовательского ввода в этих элементах управления. К сожалению, метод не может произвести правильный запрос, так как он не может найти ни одного элемента управления на странице.

С помощью временной переменной ControlCollection я смог увидеть, что количество элементов управления на моей странице равно 3, когда должно быть что-то от 4 до 10. Эти 3 элемента управления в коллекции - это статическая метка и кнопки на стр.

Я не знаю, если что-то не так с кодом или это проблема цикла страницы, так как это решение использовалось для работы в фреймворке 1.1. Да, я знаю, что это не лучший способ сделать это, но они сделали это таким образом, и я должен заставить это работать.

Я не уверен, что проблема была вызвана миграцией.

Большое спасибо, Дэвид!

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Когда вы нажимаете кнопку, элементы управления перестают быть доступными на стороне сервера, когда обрабатывается ваш обработчик кликов.Страница со стороны сервера не знает динамически создаваемых элементов управления, поскольку нет никаких серверных элементов управления для опубликованных значений для сопоставления.Если вы хотите найти значения, вам нужно проверить опубликованные контрольные данные и не полагаться на иерархию управления asp.net на стороне сервера.

Вы также можете записать все необходимые данные в скрытое поле с помощью javascriptа затем прочитайте скрытую сторону сервера данных, так как она будет опубликована.

Происходит следующее:

  1. Динамическое создание элементов управления
  2. Отправка данных элементов управления при нажатии
  3. ASP.NET сопоставляет данные с существующими элементами управления, о которых он знает.
  4. Ваши элементы управления не найдены, поэтому данные не сопоставляются ни с чем.

Вам нужнодобавить элементы управления до того, как произойдет сопоставление (в PreInit).Посмотрите Page Lifecycle , и вы увидите, как он связывает все элементы управления и данные вместе.

0 голосов
/ 25 марта 2011

Вы повторно добавляете элементы управления на новую страницу, когда пользователь нажимает кнопку поиска?

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

Кроме того, так как вы, похоже, хотите получить значения из элементов управления, вы должны будете убедиться, чтокаждый раз элементы управления создаются с одинаковым свойством ID и создаются до загрузки viewstate, если вы хотите, чтобы они сохранили свои значения.

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