+3  A: 

The action that causes this code to execute MUST be a postback event, and not an AJAX call.

This is due to the nature of the way AJAX requests are processed.

Mitchel Sellers
+1  A: 

On your button click, redirect to another page that can stream any files that you might want to do this type of thing with. We use a document.aspx page in many of our sites and then pass a document id via querystring and stream the file from there.

In your example, you're basically trying to change the headers for a page that's already been displayed which isn't allowed

Anthony Shaw
A: 

Keep your button outside the update panel. Then it works fine.

Madhu