AJAX Tabcontainer внутри формы не вставляет значения

У меня есть TabContainer внутри FormView с привязкой к данным (для представления информации по категориям, например: данные клиента Bio, история здоровья, финансовые данные...). Обновление и вставка formView не работает (отправка значений NULL в базу данных) - я думаю, FormView не может найти TextBoxes внутри панелей вкладок контейнера вкладок.

Некоторые форумы говорят, что это из-за реализации (созданной) TabContainer "INamingContainer", и взломать это - взять под контроль исходный код TabContainer (исходный код ajax ctl toolkit) и удалить из него интерфейс "INamingContainer"... Слишком сложный на мой вкус.. Я немного потерян.

Ну, есть прямой и лучший способ это исправить? Я поражен, увидев, что инструментарий не смог реализовать эту базовую функциональность, так как для большей части информации по упорядочиванию разработчиков (управление вкладками) с формой просмотра это общая потребность.

Заранее спасибо, Jeewai

1 ответ

Отвечая на мою собственную ветку... Я получил кое-что от форума asp.net и решил опубликовать решение здесь: Воспроизведение объяснения, которое помогло мне:

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

Best, JY

Цитата привет JY,

Короткий ответ заключается в том, что при компиляции оператора Bind существуют некоторые ограничения на извлечение значений для вставки / обновления. Если элементы управления в FormView находятся в другом контейнере именования (TabContainer и TabPanel являются контейнерами именования), то компилятор не может решить, как извлечь значение из TextBox. У меня есть более подробное обсуждение этого в моем блоге по адресу http://www.aarongoldenthal.com/post/2009/03/15/ASPNET-Databinding-Bind()-Method-Dissected.aspx.

Чтобы обойти это, вам нужно извлечь значения вручную, что-то вроде:

protected void FormView1_ItemUpdating (отправитель объекта, FormViewUpdateEventArgs e) { // Получить ссылки на элементы управления TextBox LastNameTextBox= FormView1.FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LastNameTextBox);

// Set update parameters in datasource
ObjectDataSource1.UpdateParameters["LastName"].DefaultValue = LastNameTextBox.Text;

}

Так как FindControl выполняет поиск только в текущем контейнере именования, вам необходимо просмотреть все контейнеры имен (FormView, TabContainer и TabPanel), чтобы перейти к TextBox.

Надеюсь, это поможет.

Аарон

Blockquote

Другие вопросы по тегам