Inquiridor
UpdatePanel Download de arquivo

Pergunta
-
Galera, bom dia!
Eu tenho um updatePanel, que dentro dele eu tenho um gridview com um LinkButton,
Quando eu clico no LinkButton ele faz o download do arquivo, usando updatePanel não está rolando, aparece a mensagem:
(Erro em tempo de execução do Microsoft JScript: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.)
eu estou usando para fazer o download do arquivo esse codigo
Response.AddHeader("content-disposition", "attachment; filename=" + "Arquivoteste " + DateTime.Now + ".xlsx");
Response.AddHeader("Content-Type", "application/Excel");
Response.ContentType = "application/vnd.xlsx";
Response.AddHeader("Content-Length", file1.Length.ToString());
Response.WriteFile(file1.FullName);
Response.End();já tentei usar
<Triggers>
<asp:PostBackTrigger ControlID="buGerarArquivo" />
</Triggers>mais não é suportado.
Teria outra maneira de fazer, ou por essa madeira eu consigo?
Obrigado!
Todas as Respostas
-
Felipe,
Este é um problema conhecido e determinar o FullPostback no botão resolveria o problema (pois o comportamento seria o mesmo se não existisse o UpdatePanel), conforme:
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="btnDownload" runat="server" Text="Download" /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="btnDownload" /> </Triggers> </asp:UpdatePanel>
Se não está funcionando, tem que verificar se não é o Id do botão que não está conforme, por exemplo, se ele estiver dentro de um TabPanel, deverá colocar o nome do TabConteiner e do TabPanel para compor o nome do botão:
<asp:PostBackTrigger ControlID="TabConteiner1$TabPanel1$btnDownload" />
Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications
- Sugerido como Resposta Seilor Bonancio JuniorModerator sexta-feira, 24 de maio de 2013 11:27
-
Diego, bom dia!
Eu fiz esse exemplo funcionou, só não apareceu o UpdateProgress que tenho na pagina,
no meu caso, eu tentei colocar o button dentro da minha gridview, ai o Update Progress funciona, mas da a mesma mensagem que aparecia com o LinkButton, e a minha trigger para de funcionar, quando eu coloco meu button dentro da gridview.
Dessa maneira que estou fazendo é a correta, teria outra maneira de fazer? eu só quero mostrar o load quando o usuario clicar para baixar o arquivo, pois está demorando uns 20 segundos.
Obrigado!
-
Felipe, bom dia!
O UpdateProgress não irá aparecer, pois, colocando a trigger PostBackTrigger você está instruindo que o botão não fará PostBack parcial (que ocorre quando um controle está dentro do UpdatePanel e que faz uma requisição assíncrona) e sim o full Postback (no qual é requisição é feita e o browser fica aguardando a resposta do servidor) que é mesmo que ocorre quando não há UpdatePanel.
Se o UpdateProgress estiver funcionando com o botão é porque a trigger PostBackTrigger não está configurada corretamente e você terá o problema do download.
Da maneira convencional, você só conseguirá realizar o download se fizer o Full Post Back.
Você pode procurar para ver se já existe algum componente do próprio AJAX ou de terceiros que faz o download assíncrono para conseguir ver o UpdateProgress (acredito que já vipara Upload de arquivos).
Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications
- Editado Diego Cotini sexta-feira, 24 de maio de 2013 14:36
-
-
Felipe,
Tente dar uma olhada neste link:
http://encosia.com/ajax-file-downloads-and-iframes/
Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications