2013-07-10 29 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