我正在尝试将 Excel 文件发送到 ASP.Net 网页的客户端,但它不起作用。
当用户单击按钮时,我们服务器端数据库中的一些数据会被格式化,放入 Excel 文件并发送给用户(作为直接下载)。
一切正常,除了发送部分和任何帮助将不胜感激。
这是我现在正在使用的代码(客户端):
var dataAjax = {};
$.ajax({
async: false,
type: "POST",
url: "Default.aspx/BuildExcelFile",
contentType: "application/json",
data: JSON.stringify(dataAjax),
dataType: "text",
success: function(html) {
//alert(html);
},
error: function(request, status, error) {
alert("An error occurred : [" + error + "]");
}
});
和服务器端代码:
<WebMethod()> _
Public Shared Function BuildExcelFile() As String
Dim localExcelPath = "C:\temp1111.xlsx"
'Build the excel file here...
'...
'Delete the old version of the Excel file
System.IO.File.Delete(localExcelPath)
'Save the Excel File locally
xWorkSheet.SaveAs(localExcelPath)
xWorkBook.Close()
exc.Quit()
'The generated excel is valid, can be opened on the server just fine
'Send the excel file to the client
'This part is not working! :(
System.Web.HttpContext.Current.Response.Clear()
System.Web.HttpContext.Current.Response.ContentType = "MS-Excel/xls"
System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" & System.IO.Path.GetFileName(localExcelPath))
System.Web.HttpContext.Current.Response.TransmitFile(localExcelPath)
System.Web.HttpContext.Current.Response.End()
Return "Success"
End Function
当我尝试验证Current.Response
Response: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
此外,如果我删除调用,数据将在 ajaxResponse.End()
中函数的 html 变量中接收。success
但是,我希望下载文件,而不是作为文本接收...
如果我保留 Response.End(),我会得到一个Internal Server Error
.
是否因为我的 Webmethod 是共享的而无法正常工作?任何线索这里发生了什么?我能做些什么来解决这个问题?
编辑:
我正在使用 .Net 3.5,如果这很重要
我没有使用 MVC