2015-07-21 64 views
0

我試圖使用ASP.NET靜態WebMethod來生成和下載Excel文件,該文件通過Ajax從jQuery調用。ASP.NET靜態WebMethod下載文件

[WebMethod] 
public static void ExportToExcel(List<ResultGroupItem> searchResult) 
{ 
    HttpResponse response = HttpContext.Current.Response; 

    ExcelExporter excelExporter = new ExcelExporter(); 
    excelExporter.ExportToExcel(searchResult, response); 
} 

在我的ExportToExcel方法中,我生成xls文件,然後添加http頭文件來下載文件。

// excelFileBytes is a byte array holding the data to be written 
if (excelFileBytes != null) 
{ 
    response.Clear(); 
    response.ContentType = "application/octet-stream"; 
    response.AddHeader("content-disposition", string.Format("attachment; filename=\"{0}\"", fileName)); 
    response.Flush(); 
    response.BinaryWrite(excelFileBytes); 
    response.Flush(); 
    response.End(); 
} 

我知道我的代碼正在工作,但是從Ajax調用它並沒有啓動下載。這裏是(在Mozilla Firefox的螢火)的反應我得到:

enter image description here

如何從阿賈克斯開始文件下載?

+1

有問題嗎? – cdsln

+0

是的,這看起來像一些XML文件(希望很明顯)的ZIP壓縮文件(領先的'PK'字符),這是一個現代化的Office XML文件。所以,服務器代碼似乎很好。 –

+1

但是,再次閱讀您的問題,我意識到您的客戶端代碼可能註定要失敗。如果你搜索'ajax trigger download',你應該找到很多結果來解釋爲什麼它不起作用。 –

回答

0

這是一個有點不清楚,你正在嘗試做的,但如果我理解你的權利,你要啓動一個文件下載而無需瀏覽器中打開一個新標籤等

你應該能夠做到這一點使用

<a href="/link/to/file" download>anchor text</a> 

由於內容處置:附件標題,「下載」屬性可能不是必需的。

+0

Hello Jimmy,使用JavaScript提供的List 即時生成excel文件。它不存在於硬盤上,通過指定路徑來下載它。 –

+0

您可能需要將

與method =「post」並將操作設置爲與您在ajax調用中使用的URL相同。然後有一個提交表單的按鈕或achor。 –

+0

我會試一試,謝謝 –

-1

嘗試是這樣的,從客戶端,如果你正在使用jQuery

「$(」 形式的行動= ' 「+ downloadUrl +」' 方法= '後'> /form>").appendTo(document .body).submit()「;

+0

表單標籤由於輸入限制而不能很好地形成。 –