отображать gif при загрузке страницы asp.net - PullRequest
13 голосов
/ 30 августа 2011

У меня длинный процесс загрузки страницы ASP.NET.

Есть ли способ отобразить gif загрузки во время загрузки страницы ASP.NET?

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

Есть подсказка? Спасибо

Ответы [ 3 ]

13 голосов
/ 30 августа 2011

Для этого можно использовать элемент управления UpdateProgress, например:

<asp:UpdateProgress ID="prgLoadingStatus" runat="server" DynamicLayout="true">
    <ProgressTemplate>
        <div id="overlay">
            <div id="modalprogress">
                <div id="theprogress">
                    <asp:Image ID="imgWaitIcon" runat="server" ImageAlign="AbsMiddle" ImageUrl="/images/wait.gif" />
                    Please wait...
                </div>
            </div>
        </div>
    </ProgressTemplate>
</asp:UpdateProgress>  

Вот несколько стилей, которые можно использовать, если вы хотите, чтобы они были полупрозрачными:

#overlay {
    position: fixed;
    z-index: 99;
    top: 0px;
    left: 0px;
    background-color: #f8f8f8;
    width: 100%;
    height: 100%;
    filter: Alpha(Opacity=90);
    opacity: 0.9;
    -moz-opacity: 0.9;
}            
#theprogress {
    background-color: #fff;
    border:1px solid #ccc;
    padding:10px;
    width: 300px;
    height: 30px;
    line-height:30px;
    text-align: center;
    filter: Alpha(Opacity=100);
    opacity: 1;
    -moz-opacity: 1;
}
#modalprogress {
    position: absolute;
    top: 40%;
    left: 50%;
    margin: -11px 0 0 -150px;
    color: #990000;
    font-weight:bold;
    font-size:14px;
}
5 голосов
/ 30 августа 2011

Пожалуйста, посмотрите мой похожий вопрос Сообщение «Пожалуйста, подождите» с использованием jQuery или AJAX? :

Пока загружается страница ASPX, вы останетесь на текущей странице в веб-браузере.Поэтому, когда вы знаете, что новая страница загружается (т.е. когда нажата кнопка или ссылка), просто покажите изображение «Загрузка», и оно автоматически исчезнет, ​​когда клиент закончит получать «новую» страницу (будь то фактическаяновая страница или та же страница, отправленная назад).

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

$(':submit').click(function() {
    $('#divLoading').show();
});

В качестве альтернативы вы можете использовать UpdatePanel, который поставляется в Ajax Toolkit или в ASP.NET 4.0.У него есть элемент управления UpdateProgress, который автоматически отображает загружаемое изображение.

РЕДАКТИРОВАТЬ:

Я думаю, что вы хотите показать изображение "Загрузка" перед вашимдаже первая страница загружена, и в этом случае вы должны поместить содержимое вашей главной страницы в UpdatePanel, использовать элемент управления загрузчиком прогресса, который автоматически показывает изображение (оба доступны в Ajax Toolkit или ASP.NET 4.0), и загрузитьсущественное (не главная страница) содержание вашей страницы после вашей начальной загрузки страницы в UpdatePanel.

Вы можете сделать это, поместив тело вашей страницы содержимого в Panel, установите видимость панели на False, а затем установите ее на True после загрузки страницы.

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

<asp:UpdateProgress ID="upgLoad" DynamicLayout="true" runat="server">
    <ProgressTemplate>
        <div id="theprogress">
            <img src="images/loading.gif" />
            <span>Loading</span>
        </div>
    </ProgressTemplate>
</asp:UpdateProgress>

РЕДАКТИРОВАТЬ:

Если вы не хотите использоватьUpdatePanel и UpdateProgress, затем просто сделайте следующее:

  1. Поместите содержимое страницы в Panel с именем pnlContent и установите видимость панели на False.
  2. Создайте img и ваше загрузочное изображение и поместите его в отдельное Panel с именем pnlLoading с установленным значением видимости True.
  3. Поместите клиентский скрипт, которыйзаставляет страницу перезагрузиться, как только она загрузится.Поместите этот скрипт внутрь pnlLoading. Обновление : поместите код # 3 ниже на своей странице ASPX, чтобы создать панель, и она немедленно вызовет публикацию.

  4. Добавьте следующий код # 4 вВаш Page_Load.

Код:

Для # 3:

<asp:Panel runat="server" ID="pnlLoading">
    <!-- Replace "form1" with your form's name. -->
    <script type="text/javascript">form1.submit()</script>
    <img src="images/loading.gif" alt="Loading" />
    <span>Loading</span>
</asp:Panel>

Для # 4:

if (Page.IsPostBack())
{
    pnlLoading.Visible = false;
    pnlContent.Visible = true;
}

Это приведет к отображению загружаемого изображения во время загрузки вашего фактического содержимого страницы.

1 голос
/ 25 июня 2014

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

Просто перетащите скрипт в no-mans-land между головным концом и теломначальные теги на главной странице.

Спасибо Субину за это.

http://subinsb.com/loading-bar-until-page-loads-completely-using-javascript

<script>
subinsblogla=0;
setInterval(function(){
if(document.readyState!='complete'){
 document.documentElement.style.overflow="hidden";
 var subinsblog=document.createElement("div");
 subinsblog.id="subinsblogldiv";
 var polu=99*99*99999999*999999999;
 subinsblog.style.zIndex=polu;
 subinsblog.style.background="black url(https://lh4.googleusercontent.com/-4WVJgCO93zc/UgpU2Y60CjI/AAAAAAAAC8E/R3XujnTjz3Y/s474/initializing.png) 50% 50% no-repeat";
 subinsblog.style.backgroundPositionX="50%";
 subinsblog.style.backgroundPositionY="50%";
 subinsblog.style.position="absolute";
 subinsblog.style.right="0px";
 subinsblog.style.left="0px";
 subinsblog.style.top="0px";
 subinsblog.style.bottom="0px";
 if(subinsblogla==0){
  document.documentElement.appendChild(subinsblog);
  subinsblogla=1;
 }
}else if(document.getElementById('subinsblogldiv')!=null){
 document.getElementById('subinsblogldiv').style.display="none";
 document.documentElement.style.overflow="auto";
}
},1000);
</script>

Он рекомендует не заменять имена переменных, поскольку может существовать другая переменная, подобная этой, и код не будет работать.Если вы хотите изменить изображение загрузки, просто измените фоновый URL в переменной subinsblog.style.background.

...