Conteúdo da resposta ASP.NET
-
18-09-2019 - |
Pergunta
Eu testei isso no IIS 6.1, ou seja, 7, ASP.NET 3.5 SP1.
Eu tenho um download de arquivo em um método no meu ASPX CodeBehind:
Response.ContentType = contentType;
Response.AppendHeader("Content-Disposition", contentDisposition);
Response.BinaryWrite(file);
Isso funciona muito bem, mas se eu tentar modificar qualquer um dos meus controles laterais severos, as alterações não afetam. Eu isolei isso até a chamada para o contentType, isso aparentemente chicoteia todas as alterações pendentes no fluxo de resposta quando chamadas? Isso soa familiar para alguém?
Se o código tomar uma filial alternativa e a chamada para download não disparar, a marcação será modificada conforme o esperado.
Alguma sugestão de como posso consertar isso e fazer com que a página libere o anexo e atualize a interface do usuário no mesmo fluxo de resposta?
Isso é especificamente para atualizar o valor de validação, para que eu pudesse invadir o JS no evento PageRequestManager completo como último recurso, mas prefiro não confiar no JS para isso.
Solução
Não tenho certeza do que você está tentando fazer - você está tentando servir simultaneamente um arquivo de download e uma atualização para a página HTML da qual vincularam? Não é assim que o HTML funciona.
Se você deseja alcançar esse resultado, basicamente terá que renderizar um meta redirecionamento que vai para o arquivo que é retornado no HTML, para que a página seja carregada e depois o download iniciar (como você verá muito de sites de download).
Outras dicas
Como Fyjham disse, eu realmente não entendo o que você está tentando fazer. Algumas dicas que podem ajudar:
- Lembre -se de que a fase de renderização, quando o conteúdo da sua marcação e controles é gerado, acontece quase a última fase do seu código atrás (bem após a página_)
- Depois de lavar os cabeçalhos, você não pode configurá -los novamente
- Os controles podem substituir alguns cabeçalhos HTTP
- Você não pode misturar um download de arquivo e marcação HTML na mesma resposta HTTP