Кнопка внутри updatePanel не работает после загрузки - PullRequest
0 голосов
/ 21 июля 2011

В моем приложении у меня есть панель обновлений с несколькими кнопками. Одна из этих кнопок - кнопка «Экспорт» - после нажатия на нее пользователь может загрузить отчет на свой локальный компьютер.

Кнопка

создается следующим образом:

btnSave = new Button
 { ID = "btnSave", CausesValidation = false, Text = "Save", CommandName = CommandNames.SaveToCSV };
Controls.Add(btnSave);
ScriptManager.GetCurrent(Page).RegisterPostBackControl(btnSave);

И после нажатия на него исполняется этот код:

string csv = GenerateReport();
Page.Response.Clear();
Page.Response.Buffer = true;
Page.Response.ContentType = "text/csv";
Page.Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
Page.Response.Write(csv);
Page.Response.End();

Загрузка работает корректно даже в панели обновления. Моя проблема заключается в том, что после первого нажатия кнопки «Экспорт» все кнопки перестают работать - у меня есть страница, которая ничего не отправляет на сервер - проверено в Fiddler (но клиентский javascrpts работает правильно). Кто-нибудь знает, как решить эту проблему? Возможно, есть другой способ загрузки данных с панели обновления (я не могу удалить эту кнопку с панели обновления).

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Я не уверен, почему это происходит, но быстрым обходным путем может быть изменение кнопки загрузки на простой href с target = _blank и перемещение кода генерации csv на выделенную страницу \ http-handler

0 голосов
/ 21 июля 2011

UpdatePanel ожидает действительную дельту после асинхронной обратной передачи, но вы отправляете файл CSV.Я предполагаю, что исключение выдается молча, но вы не видите желтый экран из-за частичной обратной передачи.Показывает ли Fiddler ответ, который выглядит как желтый экран (посмотрите содержимое ответа в Fiddler)?

(обходной путь user4537 будет работать, потому что он избегает проблемы, которую я описал выше.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...