2012-03-07 4 views
0

Проблема: Я загружаю один из нескольких элементов управления пользователя на основе выбранной вкладки в элементе управления RadTabstrip, который находится на родительской странице. Я захватил выбранную вкладку и назначил ее переменной сеанса в событии OnTabClick для использования в каждом элементе управления пользователя, чтобы определить, должен ли этот конкретный элемент управления быть визуализирован.Можете ли вы принудительно выполнить рендеринг страницы после ее загрузки

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

Когда я загружаю главную страницу, выбранная переменная табуляции проверяется каждым пользовательским элементом управления, и все работает отлично от этой области. (Первая вкладка в индексе 0 не имеет диаграмм)

Проблема заключается в том, что я выбираю вкладку с пользовательским контролем, соответствующий код для получения данных из базы данных и построения диаграммы отлично работает, но значение ТЕКСТ Элементы управления ярлыками в разделе «Разметка» не отображаются на странице, хотя значения «ТЕКСТ» устанавливаются в «Код-за», в то же время данные восстанавливаются.

Если я выполняю Post Back на той же странице, отображаются значения TEXT элементов управления Label.

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

Есть ли способ обойти это? Я рассчитываю на вызов события Render после того, как работа с базой данных будет работать, но я могу быть в стороне от своих мыслей.

Может ли кто-нибудь дать совет или потенциальное решение ???

Благодаря

+1

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

+0

Элементы UserControl являются статическими и уже созданы на сайте. Иерархией является: страница мастера, страница субмастера, страница ASPX, а затем пользовательские элементы управления, зарегистрированные с именем тега и префиксом на странице ASPX и добавленные в теги div на эту страницу. Когда сайт загружает страницу ASPX, загружается, и Markup также отображается для каждого из UserControls. Если я удалю условную проверку и просто позволю всем элементам управления построить, проблема не возникает; НО тогда у меня есть другая проблема постоянно запрашивать БД для каждого UserControl при обратной передаче. Убийца для исполнения. – Mark

ответ

1

Я никогда не был в состоянии решить проблему позднего связывания, препятствующую текст этикетки с не появляется только после ручного обновления моей страницы, так что я подошел к этому вопросу с другой стороны. Я по-прежнему сохранял логику, которая позволяла заполнять данные каждого элемента User Control, если их соответствующие вкладки были выбраны пользователем, но я переместил встроенный код, который был встроен в мою разметку в мой файл Code-Behind.

Я не был на 100% уверен в том, что обрабатывается надбавка по сравнению с обработкой кода, поэтому я исследовал и обнаружил, что все, что было сделано декларативно на странице aspx, обрабатывается первым, а объекты создаются перед доступом или обновлением кода. Итак, с этой информацией я полностью разделил их и смог получить текст для рендеринга на ярлыках без каких-либо проблем.

Я по-прежнему хотел, чтобы он знал подходящий способ заставить страницу вызвать событие Render для имитации или сопоставления справочной информации Postback после начальной Page_Load, но переход с потоком Цикла страниц намного проще и вероятно, более предпочтительный способ делать что-то.

0

Один из способов приблизиться к вашей проблеме - рассмотреть возможность использования «панели обновления». Это позволит вам отображать всю страницу, а затем на событии обновлять только область панели обновления.

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

Смежные вопросы