如何通过jquery ajax和C#下载文件

我想使用jQuery Ajax web方法下载文件,但它不起作用。

这是我对web方法的jQuery ajax调用:

function GenerateExcel() { var ResultTable = jQuery('
').append(jQuery('').append($('.hDivBox').find('thead').clone()).append($('.bDiv').find('tbody').clone())); var list = [$(ResultTable).html()]; var jsonText = JSON.stringify({ list: list }); $.ajax({ type: "POST", url: "GenerateMatrix.aspx/GenerateExcel", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { }, failure: function (response) { alert(response.d); } }); }

这是Web方法定义:

 [System.Web.Services.WebMethod()] public static string GenerateExcel(List list) { HttpContext.Current.Response.AppendHeader("content-disposition", "attachment;filename=FileEName.xls"); HttpContext.Current.Response.Charset = ""; HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; HttpContext.Current.Response.Write(list[0]); HttpContext.Current.Response.End(); return ""; } 

如何完成它? 请帮帮我。
还有一件事:我想在客户端PC上下载它,而不是将其保存在服务器上。

好吧,我用iframe完成了它

这是修改后的ajax函数调用

  function GenerateExcel() { var ResultTable = jQuery('
').append(jQuery('
').append($('.hDivBox').find('thead').clone()).append($('.bDiv').find('tbody').clone())); var list = [$(ResultTable).html()]; var jsonText = JSON.stringify({ list: list }); $.ajax({ type: "POST", url: "GenerateMatrix.aspx/GenerateExcel", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { if (isNaN(response.d) == false) { $('#iframe').attr('src', 'GenerateMatrix.aspx?ExcelReportId=' + response.d); $('#iframe').load(); } else { alert(response.d); } }, failure: function (response) { alert(response.d); } }); }

这是设计部分

   

在页面加载我的代码看起来像这样

  Response.AppendHeader("content-disposition", "attachment;filename=FileEName.xls"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.ms-excel"; Response.Write(tableHtml); Response.End(); 
  1. 在您的视图页面添加这些 –

       
  2. 服务器端

     public string Download(string file) { string filePath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["FileManagementPath"]); string actualFilePath = System.IO.Path.Combine(filePath, file); HttpContext.Response.ContentType = "APPLICATION/OCTET-STREAM"; string filename = Path.GetFileName(actualFilePath); String Header = "Attachment; Filename=" + filename; HttpContext.Response.AppendHeader("Content-Disposition", Header); HttpContext.Response.WriteFile(actualFilePath); HttpContext.Response.End(); return ""; } 
  3. 在JavaScript中添加此代码

      

这应该工作!

假设C#代码使用正确的Excel标头响应,您只需重定向到链接而不是使用ajax:

 var list = [$(ResultTable).html()]; var url = "GenerateMatrix.aspx/GenerateExcel"; var data = {list: list}; url += '?' + decodeURIComponent($.param(data)); // if url is an excel file, the browser will handle it (should show a download dialog) window.location = url;