所以我在我的gridview中有一个按钮。如果用户点击该按钮,则发送rowcommand并将pdf文件下载/写入响应。服务器无法在rowcommand发送HTTP标头之后设置内容类型
代码
HttpResponse httpResponse = Response;
httpResponse.Clear();
httpResponse.ContentType = "application/pdf";
httpResponse.AddHeader("content-disposition", $"attachment;filename={rowData.Pod.fileName}");
httpResponse.Output.Write(bytes);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
出于某种原因,试图下载该文件时,我总是得到Server cannot set content type after HTTP headers have been sent.
。现在gridview是在一个updatepanel中,但这不应该是一个问题,因为下载工作的其他按钮。
我也试过在我做文件下载之前发送缓冲区为真,但是没有改变它。
编辑
的问题是,仍然有一个异步回发,我不得不在GridView控件显示一个模式的“的SelectedIndexChanged”的设置。有什么办法可以解决这个问题吗?当我更改触发器时,在显示模态和resprings之前,整个页面会重新加载。文件下载后更改为回发,而不是asyncpostback
对不起,这是在测试我的侧。我修改了我的awnser,发生了同样的错误。什么时候应该将缓冲区设置为true? –
我不知道为什么Response.Buffer是错误的,因为默认情况下它是真的。来自UpdatePanel的请求可能会导致问题。你可以首先通过打破HttpResponse.Clear()来检查Response.Buffer的值吗? –
检查[this](http://stackoverflow.com/questions/10014920/response-write-and-updatepanel) –