Я получил это исключение в своем коде и подумал, может ли кто-нибудь мне помочь.
У меня есть элемент управления повторителем, связанный с ObjectDataSource, а шаблон элемента для повторителя содержит пользовательский элемент управления (ASCX). Этот пользовательский элемент управления, в свою очередь, содержит несколько других элементов управления, в основном GridView, связанный с ObjectDataSource.
При первоначальном использовании элементов управления в этой настройке все работает отлично - данные отображаются правильно. Однако, когда я изменяю параметр фильтра (выпадающий список за пределами повторителя), а затем перепривязываю повторитель, я получаю исключение:
Элемент управления ObjectDataSource 'expDataSource' не имеет контейнера именования. Убедитесь, что элемент управления добавлен на страницу перед вызовом DataBind. "
в System.Web.UI.WebControls.DataBoundControlHelper.FindControl (Элемент управления, String controlID)
...
...
в System.Web.UI.WebControls.ObjectDataSource.LoadCompleteEventHandler (Отправитель объекта, EventArgs e)
Я не уверен, в чем проблема - я читал в нескольких местах, что перемещение источника данных за пределы элемента управления ASCX может помочь - это ничего не делает. Источник данных объекта выглядит правильно структурированным, и, как я уже сказал, он работает в первый раз (только).
Я заметил в трассировке стека исключение, что это происходит, когда ASP.NET вызывает FindControl () после выполнения LoadComplete (). Если я перебираю свой код, кажется, что весь мой код завершает выполнение до того, как это произойдет, поэтому это весь «системный» код.
Почему ASP.NET не сможет найти этот элемент управления источником данных в обработчике LoadComplete?
Спасибо!
Другие примечания:
Эта ошибка возникает каждый раз. Таким образом, в первый раз данные загружаются правильно, а затем при втором обновлении происходит ошибка с этой ошибкой Снова нажмите «Загрузить», он работает (в третий раз).
Когда происходит сбой, похоже, что «Page_Load» вызывается дважды в элементе управления ASCX. Итак, шаблоны:
- Рабочий шаблон:
- Page_Load на родительской странице
- Page_Load на ASCX
Данные загружаются отлично
- Ошибка шаблона:
- Page_Load на родительской странице
- Page_Load на ASCX
- Page_Load на ASCX
- Исключение
Все это происходит от вызова Repeater.DataBind () ", но он ведет себя по-разному в зависимости от того, был ли он уже связан или нет (очевидно).
Больше примечаний:
Реальное странное поведение. Я удалил список SelectParameters из нижней части ObjectDataSource, и внезапно страница не отклоняет ObjectDataSource как не имеющий NamingContainer. Конечно, без этих параметров привязка данных не будет работать ... Я могу добавить их в код, но почему это важно?