Программно принудительно выполнить полную обратную передачу из UpdatePanel

У меня есть GridView на панели обновлений. Это унаследованный asp: GridView, поэтому у него есть небольшой значок «экспортировать меня», который делает именно это. Он работает, отвечая на щелчок «экспорт» с файлом XLS. Проблема в том, что если вы поместите smart GridView внутрь панели обновлений, ASP.NET решит, что файл XLS должен быть записан в панель, что, очевидно, не то, что мы хотим. Для этого мне каждый раз нужен полный постбэк.

Все мои панели обновлений сгенерированы программно.

Решения, которые не работают в этом конкретном сценарии (многие из которых описаны в другом месте на SO):

  1. В ASP.NET до версии 4, если вы оставили идентификатор вне элемента управления он будет выполнять полную обратную передачу даже из панели обновлений. Мой вопрос касается только последней и самой лучшей версии .NET 4.

  2. ScriptManager.RegisterPostBackControl выглядит многообещающим. Это заставляет контрольную обратную передачу использовать правильный идентификатор панели в качестве цели события, но в остальном не помогает.

  3. Добавление PostBackTrigger на панель обновлений. Мои панели обновлений создаются программно, и MS заявляет, что это не поддерживается. Мои тесты показывают, что они правы: я пробовал все, но это не работает.

  4. Мне не очень нравится идея, что интеллектуальный GridView должен вырываться из самого себя, но я попытался сделать так, чтобы в таких обстоятельствах он помещал дополнительный элемент управления вне updatePanel.Идея состоит в том, чтобы сделать щелчок на стороне клиента на моей кнопке экспорта внутри панели перенаправлением клиентского javascript для имитации щелчка по этой кнопке за пределами панели. Однако это не работает, потому что я, по-видимому, не могу добавить на страницу «внешний» элемент управления - я получаю сообщение «Коллекция элементов управления не может быть изменена на этапах DataBind, Init, Load, PreRender или Unload». ошибка.

  5. Использование jQuery для вывода элемента управления «экспорт» за пределы панели. У MS должен быть некоторый список элементов управления, которые, по их мнению, находятся «на» панели, и физическое расположение в DOM не имеет значения.

Есть ли у кого-нибудь идеи, как заставить это работать? Я знаю, что многое из этого должно работать, но это не совсем то же самое.

6
задан Cœur 22 January 2019 в 08:02
поделиться