Разрешить отображение страницы .ASPX до завершения загрузки элемента управления .ASCX? - PullRequest
1 голос
/ 25 марта 2011

У меня есть страница ASP.NET с одним элементом управления (.ascx). Onload страницы (.aspx) присваивает некоторый текст меткам пары и передает идентификатор продукта в элемент управления .ascx. Элемент управления .ascx, onload, получает этот идентификатор продукта со страницы .aspx и обращается к базе данных несколько раз, выполняет несколько расчетов и т. Д. - в основном загрузка занимает много времени.

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

Есть ли способ загрузить страницу .aspx ПЕРЕД загрузкой элемента управления? (Может быть, отображать анимацию «Загрузка ...»? Как используется в UpdateProgress?)

Ответы [ 3 ]

2 голосов
/ 25 марта 2011

Вы можете сделать это с помощью UpdatePanel. Это займет немного хитрости, но попробуйте что-то вроде этого:

1) Поместите UserControl в UpdatePanel.

2) Поместите публичное свойство в свой usercontrol, например IsEnabled, которое оно будет использовать, чтобы ничего не делать по условию или отображать «пожалуйста, подождите» Установите значение false на главной странице.

3) Добавьте код в OnInit на главную страницу:

if (MyScriptManager.IsInAsyncPostback) {
    MyUserControl.IsEnabled=true;
}

4) Добавьте клиентский скрипт по следующим направлениям:

finished=false;
Sys.WebForms.PageRequestManager.pageLoaded(function(sender,args) {
    if (!finished) {
      finished=true;
      __doPostBack('','');
      // you can include the uniqueID of your updatepanel as the first arg 
     // otherwise it will refresh all update panels
    }
});

или с jquery ..

finished=false;
$(document).ready(function() {
   if (!finished) {...
   }
});

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

1 голос
/ 25 марта 2011

Лично я бы никогда не использовал iFrame для загрузки контента на страницу - это больше похоже на взлом, чем что-либо и плюс, если iframe == "bad".

Но они правы, вы не будетебыть в состоянии сделать что-то похожее на то, что вы ищете.

Если пользовательский элемент управления НЕ имеет веб-элементов управления, которые вызывают обратную передачу (или имеют какие-либо элементы управления формой, к которым вам нужно получить доступ при обратной передаче),Я хотел бы использовать AJAX для запроса данных на сервере после того, как страница уже загружена, и использовать javascript для отображения содержимого на странице.

1 голос
/ 25 марта 2011

Единственный возможный способ добиться этого - настроить его как отдельный ресурс HTTP.На данный момент .NET интегрирует элемент управления в страницу, так что он ждет, пока у него есть все, что нужно для ответа.

Вы можете сделать это множеством разных способов:

  • Веб-служба, которая вызывается через javascript
  • Отдельная страница, которая содержит элемент управления (и размещена вiFrame должен отображаться на той же странице)

Лучший способ сделать это - использовать iFrame (или что-то подобное), который будет инструктировать браузер запрашивать элемент управления после того, как главная страницабыло отправлено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...