Динамично пользовательский элемент управления изменения в ASP.NET

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

Существует поле данных с именем $ uiView, присоединенное к элементу ui-view, оно содержит имя представления и связанное с ним состояние. Вы можете получить это состояние следующим образом:

elem.closest('[ui-view]').data('$uiView').state

или даже

elem.inheritedData('$uiView').state
10
задан grimus 12 June 2009 в 16:34
поделиться

4 ответа

Это классическая проблема ASP, которая не оставляет вам волос. Сетевые веб-формы. У вас есть несколько вариантов:

1) Это немного похоже на взлом, поскольку он немного выходит за рамки предполагаемого жизненного цикла страницы, но, по моему опыту, это наиболее прямой способ решения проблемы. Когда страница отправляется обратно из раскрывающегося события выбора, просто опросите Request ["MyDropDownID" ] для выбранного значения раскрывающегося элемента управления во время Init () - не ждите события OnMyDropDownChanged () , чтобы настроить страницу.

2 ) Реализуйте собственную обработку ViewState для пользовательских элементов управления. Для этого нужно покопаться в документации ViewState и переопределить ряд методов.

3) Решение Джоэла. Он меня опередил, но я пытался получить первое сообщение: p

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

5
ответ дан 4 December 2019 в 00:26
поделиться

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

-4
ответ дан 4 December 2019 в 00:26
поделиться

Если список параметров не слишком велик, вы можете просто визуализировать все пользовательские элементы управления статически и использовать JavaScript / jQuery для отображения / скрытия соответствующих элементов управления на основе значения раскрывающийся список (событие onchange js). Вы можете использовать раскрывающееся значение для извлечения соответствующих значений из пользовательских элементов управления при сохранении.

Вы избегаете боли, связанной с динамическими элементами управления, обеспечиваете более отзывчивый пользовательский интерфейс при выборе из раскрывающегося списка (без обратной передачи) и т. Д.

1
ответ дан 4 December 2019 в 00:26
поделиться

What you need to do is keep the last known value of the DropDownList in the Session. Then:

OnInit:

  • Create whatever control is indicated by the saved value in the session

SelectionChanged Event

  • Remove whatever you created during OnInit
  • Create and add new control based on new DropDownList selection
  • Save new DropDownList selection in session

This way, on the next postback after a change you are re-creating the control that ViewState expected to find, and so it's state will be restored.

Dynamic controls can be very finicky. Often it is easier to create all of the controls you might possible need and set their Visible properties to false. This way they don't render to the browser at all. Then set Visible to true for just the controls you need when you need them.

10
ответ дан 4 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: