Панель и пользовательские элементы управления против динамической загрузки пользовательских элементов управления

Если я хочу динамически показать или скрыть несколько пользовательских элементов управления. Было бы лучше использовать панели, которые загружают пользовательские элементы управления, а затем отображают или скрывают панели (visible = true / false) или лучше использовать PlaceHolder и загружать (добавлять) или снимать (очищать) их во время выполнения (LoadControl ())?

а) У меня есть страница, на которой используется AJAX UpdatePanel. На странице 10 панелей, каждая из которых загружает пользовательский элемент управления. В программном коде я делаю панель видимой или невидимой, отображая только по одному. Это простое решение, поскольку все пользовательские элементы управления находятся на странице, к ним и их внутренним элементам управления легко обращаться.

б) Динамическая загрузка элементов управления с использованием LoadControl кажется немного более сложной.

Интересно, есть ли какие-то преимущества по сравнению с методом а. Проблемы с ViewState? Проблемы с производительностью рендеринга? Проблемы с размером HTML?

Спасибо,

A


person Aldo    schedule 07.04.2011    source источник
comment
Вы знаете, что можете просто создать div: <div id="myDiv" runat="server"></div> для программирования.   -  person The Muffin Man    schedule 08.04.2011


Ответы (1)


Я бы предпочел вариант А. Динамическая загрузка элементов управления и их воссоздание в обратных передачах всегда намного сложнее и подвержено ошибкам, чем переключение видимости элементов управления в aspx-разметке.

Я должен признать, что не понимаю, почему вы делаете различие между панелью и заполнителем. Основное отличие состоит только в том, что Panel отображается как DIV, а PlaceHolder вообще не имеет HTML.

Вам следует лениво загружать свои пользовательские элементы управления, если они все на странице, но видны только отдельные элементы управления. Это означает:

Ничего не делайте в UserControl's Page_Load, но только когда контроллер (страница) делает его видимым. Поэтому предоставьте функции для загрузки их данных и обновления их внутренних UpdatePanels в файле ascx. Затем - после того, как функция была вызвана со страницы и элемент управления стал видимым - пусть страница обновит внешний UpdatePanel вокруг UserControl.

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

Позвольте им общаться следующими способами:

  • Страница ›UserControl через функции / свойства
  • UserControl ›Страница через события

Вывод:

  • У варианта B нет преимуществ ни в ViewState, ни в HTML-Size. Создавайте элементы управления динамически, только если вам действительно нужно (динамический контент)!
person Tim Schmelter    schedule 07.04.2011
comment
Спасибо за ваш быстрый ответ. Ленивая загрузка - отличная идея, это действительно гарантирует отсутствие задержек при загрузке страницы (и пользовательских элементов управления). - person Aldo; 08.04.2011