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