AJAX Tabcontainer внутри формы не вставляет значения - PullRequest
2 голосов
/ 09 июня 2009

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

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

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

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

1 Ответ

2 голосов
/ 11 июня 2009

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

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

Лучший, JY

Blockquote Привет ДЖИ,

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

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

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

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

}

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

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

Аарон

Blockquote

...