Question

I checked my browser isn't blocking any popups but I seem to have a error in my code which I can't seem to figure out whats the problem

    protected void btnDownload_Click(object sender, EventArgs e)
    {
        var context = new HMangInternationalContext("HMangInternational");
        var id = Convert.ToInt32((sender as Button).CommandArgument);
        var song = context.AlbumEntries.Where(x => x.ID == id).FirstOrDefault();
        if (song != null)
        {
            Response.Clear();
            Response.AddHeader("Content-type", "application/octet-stream");
            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(song.FileName));
            Response.BinaryWrite(song.Data);
            Response.End();
            udpFiles.Update();
        }
    }

I also tried a version where the size was included but that didn't work either, its like a silent discard, does anyone maybe see my error in my code ?

Here is my Asp.net Code (this works)

<asp:UpdatePanel runat="server" ID="udpFiles">
    <Triggers>
        <asp:PostBackTrigger ControlID="gdvSongs" />
    </Triggers>
    <ContentTemplate>
        <h1 class="hmang-page-header">TRACKS<asp:Button runat="server" Text="Add New Track" OnClientClick="Show();" ID="btnAdd" Visible="false" class="btn btn-primary set-right"></asp:Button></h1>
        <asp:GridView ID="gdvSongs" runat="server" AutoGenerateColumns="false" CssClass="table table-dark table-condensed table-bordered">
            <Columns>
                <asp:TemplateField>
                    <HeaderTemplate>
                        Track Name
                    </HeaderTemplate>
                    <ItemTemplate>
                        <%# Eval("Name") %>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        File
                    </HeaderTemplate>
                    <ItemTemplate>
                        <%# Eval("FileName") %>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button Text="Download" runat="server" CssClass="btn btn-primary" ID="btnDownload" CommandArgument='<%# Eval("ID") %>' OnClick="btnDownload_Click" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>
Was it helpful?

Solution

An educated guess: this happens inside an update panel, doesn't it?

This happened to me once, the reason that no error/exception is thrown is that nothing actually is wrong in the back end. Your file data goes back to the front-end, which rejects it to render the content of the update panel.

If that's your case, you have to put the control who fires the postback (i.e. btnDownload )as a sync trigger of the update panel:

<Triggers>
        <asp:PostBackTrigger ControlID="gdvSongs" />
</Triggers>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top