Одна панель обновлений обновлена, а другая также обновлена? - PullRequest
4 голосов
/ 24 июля 2009

У меня есть сценарий, у меня есть две панели обновления на странице (обе имеют режим обновления = 'условный'). Если я обновляю одну панель обновлений, другая обновляется автоматически. Это первая проблема.

Я использую UpdatePanelAnimationExtender . Если обновляется одна панель обновлений, у которой нет updatepanelAnimationExtender, другая также обновляется и у которой есть updatepanelAnimationExtender, OnUpdatingUpdatePanel ();событие запущено. Как сказано в документации для updatepanelAnimationExtender: http://www.asp.net/AJAX/AjaxControlToolkit/Samples/UpdatePanelAnimation/UpdatePanelAnimation.aspx

OnUpdating - Общая анимация воспроизводится, когда любое UpdatePanel начинает обновление

OnUpdated - Общаяанимация, воспроизводимая после того, как UpdatePanel закончила обновление (но только если UpdatePanel был изменен)

Проблема: OnUpdating сработал, и он работал бэкэнд и не был завершен, потому что onUpdatedЗапускается только когда UpdatePanel Изменено

Ответы [ 2 ]

2 голосов
/ 20 марта 2010

"Добавить 2 панели обновления на странице, установить updatemode = 'conditional' для обоих, добавить событие загрузки для панели обновления и установить точку останова для события загрузки, добавить кнопку 1, а затем добавить асинхронный триггер для нажатия кнопки на панели обновления 1. ... когда вы нажмете кнопку, вы заметите, что она должна загружать только триггерную панель обновления, а вторая остается неизменной, но 2-я панель обновления также вызывает событие загрузки "

Это произойдет, только если кнопка находится внутри 2и обновления панели? Если нет, то я не думаю, что он обновит вторую панель обновления. Не могли бы вы подтвердить, находится ли кнопка внутри или снаружи второй панели обновления?

0 голосов
/ 05 февраля 2014

У меня была такая же проблема. Две панели обновлений на одной странице, которые НЕ являются вложенными и имеют UpdateMode = "Conditional". Просто поймите, что когда одна панель обновлений на странице вызывает частичную обратную передачу, все панели обновлений будут вызывать событие обновления. Если у вас есть UpdatePanelAnimationExtender, подключенный к UpdatePanel A, и частичная обратная передача запускается для несвязанного UpdatePanel B, оба будут получать событие обновления, и анимация для UpdatePanel A будет запускать только часть OnUpdating, а не часть OnUpdated (такв основном анимация будет выполняться на полпути).

Вот как я исправил эту проблему: определите, какая панель обновления была запущена. Это можно узнать, получив значение переменной формы для менеджера скриптов. Соответствующая панель обновления будет упомянута в строке. Используйте эту информацию для выполнения действий, основанных на ваших потребностях.

// Variable to hold ScriptManager.  Just slap this in the class for the page.
private ScriptManager scriptManager;

// Get the ScriptManager.  Put this in Page_Init handler.
// If you have the ScriptManager on the same page, just refer to it directly.
// If you have it on the master page, you can get a reference to it like so.
// The second line shows one way you can get a reference to the ScriptManager from
// a user control.
// FYI, the same code applies to a ToolkitScriptManager.
scriptManager = ScriptManager.GetCurrent(this);
// scriptManager = ScriptManager.GetCurrent(HttpContext.Current.Handler as Page);

// This function checks whether an UpdatePanel is being updated
private Boolean IsUpdatePanelUpdating(String sUPID)
{
    String sUpdateValue = Request.Form[Request.Form.AllKeys.Where(s => s.EndsWith(scriptManager.ClientID)).FirstOrDefault()] ?? String.Empty;
    return sUpdateValue.Contains(sUPID);
}

// This is code you can put somewhere (say within OnLoad handler) to make an
// UpdatePanel A get updated even if an unrelated UpdatePanel B is currently being
// updated.
if (!IsUpdatePanelUpdating(upA.ClientID))
    upA.Update(); 

Надеюсь, это кому-нибудь поможет.

...