因此,我想做的是向网页添加一个链接,单击该链接将调用一个通用处理程序,该处理程序将在内存中创建所需的数据并将其作为某种流返回给用户。 ,然后提示他们将其另存为文件。
所以,我们可能有: Clickety
而JavaSctipt makeme()函数就是
function makeme() {
$.ajax({
url: 'makefile.ashx',
cache: false
}).done(function (response) {
//alert(repsonse)
});
}
在处理程序中,我尝试过:
Dim rtn As String = "1,2,3,4,5"
Dim bArray As Byte() = System.Text.Encoding.Default.GetBytes(rtn.ToCharArray())
' or Dim mstream As New MemoryStream(bArray) ‘ alt (see below)
' either of the next two lines
context.Response.ContentType = "application/octet-stream"
context.Response.ContentType = "application/force-download"
context.Response.AddHeader("Content-Length", bArray.Length.ToString())
context.Response.AddHeader("Content-Disposition", "filename.csv")
context.Response.BinaryWrite(bArray)
' or context.Response.Write(mstream) ‘ if alt used above
虽然似乎什么都没有发生。...
更简单:
Dim rtn As String = "1,2,3,4,5"
context.Response.Clear()
context.Response.ContentType = "text/csv"
context.Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv")
context.Response.Write(rtn)
尽管如此,单击链接也没有任何反应-我的意思是,调用了处理程序,仅此而已。
答案 0 :(得分:1)
问题在于jQuery的$.ajax
方法从未打算触发文件下载。这是为了下载数据以供以后在JavaScript中处理。
您应将锚点的href
属性直接指向处理程序。然后浏览器将注意到响应的content-disposition
并处理文件下载。
<a href="makefile.ashx">Clickety</a>