AJAX Tabcontainer внутри formview не вставляет значения

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

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

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

Спасибо заранее, Jeewai

Ответы

Ответ 1

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

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

Бест, JY

Blockquote Привет, 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" ) как TextBox;

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

}

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

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

Аарон

Blockquote