2009-02-06 3 views
7

Я пытаюсь отобразить процесс обновления обновления, когда моя панель обновления делает это Ajax. Я просмотрел учебники, и это кажется очень простым, но мне не повезло. Здесь довольно много, что у меня есть ...Не удается получить ASP.Net UpdateProgress для отображения

<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> 

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

EDIT: только новая информация, которую я нашел, что ...

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

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

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

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

+1

Обратите внимание, что элемент управления UpdateProgress имеет параметр DisplayAfter, который указывает время в миллисекундах, которое должно пройти до отображения его содержимого. По умолчанию это 500 миллисекунд, поэтому, если ваша операция Ajax быстрее, чем это (и многие из них), вы не увидите индикатора прогресса. Чтобы протестировать это, вы можете ввести задержку в обработке на стороне сервера, используя Threading.Thread.Sleep (1000), который будет задерживаться на 1 секунду. Затем вы увидите содержимое прогресса обновления. См. Https://blogs.msdn.microsoft.com/kashif/2006/11/08/updateprogress-control-in-asp-net-ajax/ –

ответ

2

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

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

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

4

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

+1

Спасибо за быстрый ответ, но я уже по этому пути уже и Я просто попытался дважды проверить. Все еще не удача. Также на странице примеров asp.net для UpdateProgress говорится, что «вы можете устанавливать элементы управления UpdateProgress внутри или вне элементов управления UpdatePanel». – Carter

+0

Хмм, вы пробовали вынимать элемент управления изображением и просто вставляете какой-то статический текст, чтобы убедиться, что ваш путь изображения правильный? – Element

4

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

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

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

2

У меня было очень тяжелое время после преобразования моего проекта с VS2008 на VS2010.UpdateProgress внезапно прекратил работу, что было хорошо в VS2008. Проведя целый день, чтобы найти ответ и экспериментировать с этим и тем, наконец, я нашел, что пошло не так с Scott Gu's posting.

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

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

Счастливый кодирования

4

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

+0

DisplayAfter было то, чего не хватало в моем случае. У меня есть панель обновления обновлений внутри панели обновлений и отлично работает. Спасибо за подсказку –

+1

, вы имеете в виду 1000 на 1 сек. –

-1
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); 
} 
+0

Этот ответ не помогает решить проблему –

1

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

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