2014-10-12 167 views
0

我有一个PDF文件的href链接,点击后它会在浏览器的新页面中打开。我希望这下载,而不是在新标签中打开。单击时下载PDF(不在浏览器中打开)

那么如何使PDF文件链接可下载,而不是在浏览器中打开它们呢?

下面的代码:背后

<asp:FormView ID="FormView2" runat="server"> 
      <ItemTemplate> 
       <asp:LoginView ID="LoginView1" runat="server"> 
        <LoggedInTemplate> 
          <asp:HyperLink ID="HyperLink1" ToolTip="Open" CssClass="button" runat="server" NavigateUrl='<%# Eval("PDFUrl") %>' Text="Open" Target="_blank"></asp:HyperLink> 
         <br /> 
        </LoggedInTemplate> 
        <AnonymousTemplate> 
          <p>You need to log in to view the book.</p> 
        </AnonymousTemplate> 
       </asp:LoginView> 
      </ItemTemplate> 
     </asp:FormView> 

代码:

protected void Page_Load(object sender, EventArgs e) 
{ 
    int bookId = Convert.ToInt32(Request.QueryString.Get("BookId")); 


    using (LibraryEntities entities = new LibraryEntities()) 
    { 
     var book = (from r in entities.Books 
          where r.Id == bookId 
          select r); 
     FormView2.DataSource = book; 
     FormView2.DataBind(); 
    } 
} 
+0

你可以发布一些示例url到你正在显示的PDF文件吗? – Michael 2014-10-12 10:15:07

+0

点击后,它会在新标签中指向类似内容:http:// localhost:52747/PDF/CSS%20Quick%20Syntax%20Reference.pdf – user123456 2014-10-12 10:20:30

回答

2

属性download只需添加到<asp:HyperLink>

最终的代码将会是。

<asp:HyperLink ID="HyperLink1" ToolTip="Open" CssClass="button" runat="server" 
       NavigateUrl='<%# Eval("PDFUrl") %>' Text="Open" Target="_blank" download 
</asp:HyperLink> 

注意:这是一个HTML5属性,所以将只用于HTML5兼容的浏览器。检查此链接查看download属性的支持在不同浏览器 - http://caniuse.com/#feat=download

+0

这不是HTML5属性吗? – Michael 2014-10-12 10:24:31

+0

@michaelmoore,是的,http://www.w3schools.com/tags/att_a_download.asp – 2014-10-12 10:26:26

+0

然后我会建议在你的答案中提到它,因为可能OP需要支持'html5'不兼容的浏览器。 – Michael 2014-10-12 10:28:09

0
Response.Clear(); //eliminates issues where some response has already been sent 
Response.ContentType = "text/plain"; 
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.sql", filename)); 
Response.Write(yourSQL); 
Response.End(); 

类似的问题已经被问here

相关问题