none
UpdatePanel Download de arquivo RRS feed

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

    quinta-feira, 23 de maio de 2013 13:34

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

    quinta-feira, 23 de maio de 2013 18:07
  • 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!

    sexta-feira, 24 de maio de 2013 14:01
  • 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
    sexta-feira, 24 de maio de 2013 14:36
  • Diego, obrigado!

    Eu vou dar mais umas pesquisada no ajax se não tiver, vou ver as de terceiros.

    sexta-feira, 24 de maio de 2013 15:25
  • 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

    sexta-feira, 24 de maio de 2013 15:33