我检查过我的浏览器并没有阻止任何弹出窗口,但我的代码中似乎有一个错误,我似乎无法弄清楚问题是什么
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>
答案 0 :(得分:1)
一个有根据的猜测:这发生在更新面板内,不是吗?
这件事发生在我身上,没有抛出任何错误/异常的原因是后端没有任何错误。您的文件数据会返回到前端,前端会拒绝它以呈现更新面板的内容。
如果是您的情况,您必须将触发回发的控件(即btnDownload
)作为更新面板的同步触发器:
<Triggers>
<asp:PostBackTrigger ControlID="gdvSongs" />
</Triggers>