我检查了我的浏览器没有阻止任何弹出窗口,但我的代码中似乎有一个错误,我似乎无法弄清楚问题出在哪里
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>
有根据的猜测:这发生在更新面板内,不是吗?
我遇到过一次这种情况,没有抛出错误/异常的原因是后端实际上没有任何问题。您的文件数据返回到前端,前端拒绝它来渲染更新面板的内容。
如果是您的情况,您必须将触发回发的控件(即
btnDownload
)作为更新面板的同步触发器:
<Triggers>
<asp:PostBackTrigger ControlID="gdvSongs" />
</Triggers>
你对上面的内容做了什么改变?标记的答案看起来是一样的。我也有同样的问题。