Панель управления и пользовательские элементы управления загружают пользовательские элементы управления динамически - PullRequest
3 голосов
/ 08 апреля 2011

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

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

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

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

Спасибо,

A

1 Ответ

3 голосов
/ 08 апреля 2011

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

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

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

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

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

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

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

Вывод:

  • Нет никаких преимуществ для опции B ни в ViewState, ни в HTML-размере. Создавайте элементы управления динамически, только если вам действительно нужно (динамический контент)!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...