2017-02-09 57 views
0

将数据导出到Excel的过程正在运行。但我不需要重新加载页面。当我尝试按导出数据到Excel页面正在重新加载。如何避免这种情况?请帮忙。谢谢。如何在不重新加载页面的情况下使用ASP.NET MVC 5将数据导出到Excel?

C#:

public ActionResult Export(int id) { 
    Excel.Application application = new Excel.Application(); 
    Excel.Workbook workbook = application.Workbooks.Add(System.Reflection.Missing.Value); 
    Excel.Worksheet worksheet = workbook.ActiveSheet; 
    var export = _context.Employees.Where(x => x.Id == id)ToList(); 

    worksheet.Cells[1, 1] = "Name"; 
    worksheet.Cells[1, 2] = "Age"; 
    worksheet.Cells[1, 3] = "Position"; 
    worksheet.Cells[1, 4] = "Address"; 
    worksheet.Cells[1, 5] = "Contact"; 

    foreach (var e in export) 
    { 
     worksheet.Cells[row, 1] = e.Name; 
     worksheet.Cells[row, 2] = e.Age; 
     worksheet.Cells[row, 3] = e.Position; 
     worksheet.Cells[row, 4] = e.Address; 
     worksheet.Cells[row, 5] = e.Contact; 

     row++; 
    } 

    workbook.SaveAs(@"C:\Excel\sample.xls"); 
    workbook.Close(); 
    Marshal.ReleaseComObject(workbook); 

    application.Quit(); 
    Marshal.FinalReleaseComObject(application); 

    return View(); 
} 

阿贾克斯:

<script> 
    $(document).ready(function() { 
     $(".js-export").click(function(e) { 
      var link = $(e.target); 
      $.ajax({ 
        url: "/home/export/" + link.attr("data-export-id"), 
        method: "GET" 
        }) 
     }); 
    }); 
</script> 

事件:

<a href="#" class="js-export btn btn-danger btn-xs" data-export-id="@item.Id">Export to Excel</a> 
+1

'返回查看()'似乎很奇怪。你不应该在响应流中发回文件吗? –

+0

你确定你放的链接实际上是什么调用Ajax事件吗? 'js-delete-property'没有类,它没有'data-id'属性,它有'data-export-id'。 –

+0

是的,我使用return View()。那“结果流”如何?你可以帮我吗。 –

回答

0

而不是使用的ActionResult可以使用JsonResult并且可以返回Excel文件的唯一网址: -

$.ajax({ 
      type: 'GET', 
      url: "/home/export/" + link.attr("data-export-id"), 
      dataType: 'json',     
      success: function (data) {     
       console.log(data.ExcelUrl); 
      } 
     }); 

你在控制器代码: -

public JsonResult Export(int id) 
     { 
      //Exel generation code here showing in your post. 
      return Json(new { ExcelUrl = "New Excel URL path" }, JsonRequestBehavior.AllowGet); 
     } 
+0

嗨,阿南德,是好建议。什么是新的Excel URL路径?我无法理解。 –

+0

谢谢,它的excel文件路径如“C:\ Excel \ sample.xls”。如果它解决了你的问题,请将它标记为答案,以便其他人可以使用它。 –

+0

肯定阿南德,你最好的!!!这个怎么样? // Get excel URL Here –

0

呼叫通过$.ajax的行动,并在行动返回FileResult

public FileResult Export(int id) 
{ 
    //.........your file creation logic goes here ....// 

    byte[] fileBytes = File.ReadAllBytes(filePath); 
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 
} 
+0

@Paul - 'filePath'是您保存文件的路径。在你的示例中,它的'C:\ Excel \ sample.xls' – Developer

+0

我试过了,但为什么它没有像下载一样的提示? –

+0

现在是下载文件吗?或只是提示缺失? – Developer

相关问题