Невозможно отобразить ASP.Net UpdateProgress для отображения - PullRequest
7 голосов
/ 06 февраля 2009

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

<div id="panelWrapper">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:UpdateProgress ID="TaskUpdateProgress" runat="server" DynamicLayout="False" AssociatedUpdatePanelID="UpdatePanel1" DisplayAfter="0">
            <ProgressTemplate>
                <asp:Image ImageUrl="~/Images/ajax-loader.gif" Width="16px" Height="16px" runat="server" ID="TaskLoadingImage"/>
            </ProgressTemplate>
        </asp:UpdateProgress>

        <div id="UrlDiv" class="URLNotification">
            <asp:Label ID="UrlLabel" runat="server" Text="URL:" AssociatedControlID="Url" />
            <asp:HyperLink ID="Url" runat="server" Text="Click &quotGenerate" to create the URL." />
        </div>

        <br />

        <asp:CheckBoxList runat="server" ID="IncludeItems" TextAlign="Right">
            <asp:ListItem Selected="True">Include 1</asp:ListItem>
            <asp:ListItem Selected="True">Include 2</asp:ListItem>
        </asp:CheckBoxList>

        <br />

        <div id="buttons" style="display:inline;">
            <asp:Button ID="Generate" runat="server" OnClicked="Generate_Clicked" Text="Generate" />
            <asp:Button ID="Add" runat="server" OnClientClick="add();" Text="Add"/>  
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

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

РЕДАКТИРОВАТЬ: Единственная новая информация, которую я нашел, это то, что ...

«В следующих сценариях элемент управления UpdateProgress не будет отображаться автоматически:

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

Элемент управления UpdateProgress не связан ни с одним элементом управления UpdatePanel, и асинхронная обратная передача не является результатом элемента управления, который не находится внутри UpdatePanel и не является триггером. Например, обновление выполняется в коде. "

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

Ответы [ 7 ]

5 голосов
/ 26 апреля 2009

У меня также та же проблема с UpdateProgressPanel. Я обнаружил, что когда вы поместили UpdateProgressPanel и связали его с UpdatePanel, любая обратная передача из этого UpdatePanel вызовет отображение UpdateProgressPanel.

Другой трюк, который нужно сделать, - это удалить параметр AssociatedUpdatePanel, если у вас есть одна UpdatePanel на странице, это заставит UpdateProgressPanel показывать каждый происходящий Async PostBack.

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

4 голосов
/ 21 октября 2010

Убедитесь, что для UpdateProgress 'DisplayAfter' установлено значение 1000 (1 сек)

4 голосов
/ 06 февраля 2009

Не помещайте элемент управления процессом обновления в элемент управления панели обновления.

2 голосов
/ 08 октября 2010

Мне было очень тяжело после преобразования моего проекта из VS2008 в VS2010. UpdateProgress внезапно перестал работать, что было хорошо в VS2008. Потратив целый день на поиск ответа и экспериментируя с этим и с этим, я, наконец, обнаружил, что пошло не так, как Скотт Гу

Это была автоматически сгенерированная запись web.config 'xhtmlConformance mode = "Legacy" '.

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

Счастливое кодирование

2 голосов
/ 06 февраля 2009

Наверное, я понял, что происходит. Проблема была не в том, что я делал неправильно с UpdateProgress или Panel. Это было то, что у меня были другие вещи, загружаемые в фоновом режиме, которые, по-видимому, задерживали Ajaxyness UpdatePanel.

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

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

1 голос
/ 08 января 2015

У меня также была проблема, когда UpdateProgress не показывался. Оказалось, что обратная передача на сервер была настолько быстрой, что не успела показать. Добавление Thread.Sleep (10000) помогло показать проблему.

0 голосов
/ 15 августа 2012
Create a new ASP.NET Ajax-Enabled Web Site and then paste these code in ascs and aspx file. Run it and you can see the update progress. You can use animated gif files too to show the progress...

ascx Page
======================================================
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>UpdateProgress control</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <asp:UpdateProgress runat="server" id="PageUpdateProgress" AssociatedUpdatePanelID="Panel">
            <ProgressTemplate>
                Loading...
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel runat="server" id="Panel">
            <ContentTemplate>
                <asp:Button runat="server" ID="UpdateButton" OnClick="UpdateButton_Click" Text="Update" />
            </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="UpdateButton" EventName="Click"  />
                </Triggers>            
        </asp:UpdatePanel>
    </form>
</body>
</html>

aspx Page
======================================================
protected void UpdateButton_Click(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(5000);
}
...