2013-07-10 66 views
0

我很難將XML流發送到客戶端瀏覽器。我已經對此進行了相當的研究,並且一切都看起來很正確 - 此外,類似的代碼在此應用的以前版本中也適用。任何想法我可能做錯了什麼?將XML輸出爲ASP.NET中的文件

以下代碼不會引發錯誤,但不會在客戶端計算機上下載文件。

 Public Shared Sub Export(ByVal source As DataTable) 

     Try 

      With Current.Response 


       Dim xml As String = CreateExcelXMLFromDataTable(source.DefaultView) 

       .Clear() 
       .Buffer = True 
       .ContentType = "application/vnd.ms-excel" 
       .AddHeader("Content-Disposition", String.Concat("attachment;filename=", "export.xlsx", ";")) 
       .AddHeader("Content-Length", xml.Length.ToString) 
       .Charset = "" 
       .Write(xml) 
       .Flush() 
       .Close() 

      End With 


     Catch ex As Exception 

      Console.WriteLine(ex.Message.ToString) 

     End Try 

    End Sub 

謝謝!

+0

你有什麼跡象表明它是錯的?是否有錯誤訊息?意外的輸出? – David

+0

根本沒有錯誤消息。什麼都沒有,當我否則期望一個文件下載或下載對話框彈出。 – christok

+0

你確定代碼正在執行嗎?當你調試這個時,會發生什麼?請注意,在調試器外部,您忽略了此代碼中的任何和所有錯誤。你期望'Console.WriteLine'在Web應用程序中做什麼?所以很可能是一個錯誤,你只是明確地忽略它。 – David

回答

0

如果您在Ajax請求中調用此函數,它將不起作用。您必須導致完整回發才能將文件發送到客戶端。

您可以發送文件,而無需使用彈出窗口(window.open)或iframe與下載asp.net頁面的URL,這將調用Export功能在當前頁面造成一個完整的回發。

+1

這是一篇很好的關於如何完成這項工作的小文章。感謝您的幫助,夥計們。 http://encosia.com/ajax-file-downloads-and-iframes/ – christok