2013-03-08 2 views
1

В настоящее время у меня есть две страницы на моем веб-сайте ASP.net. На первой странице пользователь может ввести некоторые данные, а затем нажать кнопку. Затем он будет откликнуться на следующую страницу, отправив с ней данные пользователя.ASP.Net отображает накладку загрузки на новой странице

Это следующая страница имеет страницу нагрузки

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      GetInformation();   
     } 
    } 

GetInformation() делает длинную обработку, используя эти данные пользователя, что занимает около 15-20 секунд.

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

Что я хочу сделать, когда пользователь нажимает кнопку, появляется новая страница, а затем появляется надпись с надписью «Погрузка» или что-то еще, а затем запустите GetInformation(). По завершении GetInformation наложение исчезнет.

Я проделал поиск в Google и увидел некоторые идеи, но ни один из них, похоже, не подходит для моей проблемы.

Что было бы лучшим способом сделать это?

ответ

1

Страница будет показана только после того, как событие page_load выполнено полностью. Так что не вызывайте функцию ur в событии page_load. Вместо этого используйте таймер для запуска вызова функции ur.

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

<asp:Timer ID="tmr" runat="server" Interval="3000" OnTick="tmr_Tick" Enabled="true"> 
</asp:Timer> 

Теперь на стороне сервера код будет то, что некоторые выглядят как этот

protected void tmr_Tick(object sender, EventArgs e) 
{ 
    tmr.Enabled = false; 
    GetInformation();   
    loadingIndicator.Style.Add("display", "none"); 
} 

Теперь для того, чтобы показать индикатор загрузки положить DIV, как это на страница

<div id="loadingIndicator" runat="server" style="background-image:url(ajax-loader-small.gif);background-repeat: no-repeat; width: 100%; height: 104px; background-position: center;"> 
</div> 

индикатор загрузки будет отображаться по умолчанию и когда GetInformation() закончен, мы можем сменить дисплей

Надеюсь, что это поможет ....

+0

Как будет отображаться индикатор загрузки с кода сервера? ваш текущий код не будет работать –

+0

@ Knaģis обновил мой ответ Посмотрите – iJade

+0

Кажется, что работал до сих пор, спасибо. Мне все еще нужно немного изменить мой код, потому что браузер показал все детали, которые он получил, но он все еще говорит о подключении на вкладке, как будто он все еще пытается что-то сделать. – saintsfanuk

1

Очень простое решение:

  1. Создать новую страницу Loading.aspx. Добавьте соответствующие стили и все, чтобы оно выглядело как ожидаемая страница загрузки.

  2. На этой странице добавьте следующий тег в <head> тег: <meta http-equiv="refresh" content="0;URL='LongLoadingPage.aspx'" />

Теперь вместо того, чтобы перенаправлять LongLoadingPage.aspx непосредственно, перенаправлять на Loading.aspx странице.

Разумеется, это быстрое решение, которое может быть лучше, если вы инициализируете длительную работу с использованием запросов AJAX (используя UpdatePanel или vanilla XMLHttpRequest).

+0

Спасибо, это было мое резервное решение! – saintsfanuk

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