【问题标题】:forcing download when a link is clicked in c# [duplicate]在c#中单击链接时强制下载[重复]
【发布时间】:2012-08-05 04:59:43
【问题描述】:

可能重复:
href image link download on click

我创建了一个项目符号列表

<asp:BulletedList ID="BulletedList1" runat="server" DisplayMode="HyperLink" 
            DataSourceID="SqlDataSource1" DataTextField="description" 
            DataValueField="link" onclick="BulletedList1_Click">
        </asp:BulletedList>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:chaaapaConnectionString6 %>" 
        SelectCommand="SELECT [description], [link] FROM [quiz]">
    </asp:SqlDataSource>

datavalue 字段包含指向图像文件的链接。单击时,图像会显示在浏览器中。我希望显示一个下载框。

【问题讨论】:

标签: asp.net sql download


【解决方案1】:

图像在浏览器中打开是因为您的代码(我认为)只是生成了一个超链接,并且浏览器会识别 MIME 类型并绘制它(而不是打开下载提示)。你需要设置响应头来告诉浏览器有不同的行为。

具体来说,你要设置content-disposition

见:Uses of content-disposition in an HTTP response header

最简单的方法可能是创建一个简单的 HTTP 处理程序,该处理程序使用Response.BinaryWrite() 写入图像和标头。空的 ASPX 页面可以是处理程序,也可以使用通用处理程序(ASHX 文件)。

This tutorial 似乎大致涵盖了您正在做/需要做的事情。确保 content-disposition 值/语法完全正确(浏览器可能会使用格式错误的标头做奇怪的事情)。

【讨论】:

  • 我找到了这段代码。但我对从链接中获取文件名感到困惑??字符串文件名=BulletedList1.DataValueField.ToString();响应。清除(); Response.AddHeader("内容配置", "附件;文件名="+文件名); Response.ContentType = "图片/jpeg"; Response.WriteFile(Server.MapPath(@"~/"+filename)); Response.End();
  • 您需要将文件名作为数据绑定的一部分传递给处理程序。或者,您可以编写文件以响应单击事件(请参阅本文末尾附近的示例):msdn.microsoft.com/en-us/library/…。或者,中继器可能更容易:stackoverflow.com/questions/1097916/…
猜你喜欢
  • 2016-01-31
  • 2013-11-08
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2018-08-21
  • 1970-01-01
相关资源
最近更新 更多