尝试使用更新面板下载文件时出现问题

问题描述 投票:0回答:2

我检查了我的浏览器没有阻止任何弹出窗口,但我的代码中似乎有一个错误,我似乎无法弄清楚问题出在哪里

    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();
        }
    }

我还尝试了一个包含大小的版本,但这也不起作用,它就像一个无声的丢弃,有人可能会在我的代码中看到我的错误吗?

这是我的 Asp.net 代码(有效)

<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>
c# asp.net updatepanel
2个回答
2
投票

有根据的猜测:这发生在更新面板内,不是吗?

我遇到过一次这种情况,没有抛出错误/异常的原因是后端实际上没有任何问题。您的文件数据返回到前端,前端拒绝它来渲染更新面板的内容。

如果是您的情况,您必须将触发回发的控件(即

btnDownload
)作为更新面板的同步触发器:

<Triggers>
        <asp:PostBackTrigger ControlID="gdvSongs" />
</Triggers>

0
投票

你对上面的内容做了什么改变?标记的答案看起来是一样的。我也有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.