2016-04-26 50 views
0

我有一个控制器方法将html转换为excel,当它不是一个web方法时它工作正常。但是当html字符串变得太大时停止工作。我将它转换为我通过jQuery调用的web方法。它将数据传递给方法,但不再创建Excel文件。该方法内的代码没有改变。唯一的区别就是我称之为[HttpPost]装饰的方式。代码如下:C#MVC HTML到EXCEL不起作用

[HttpPost] 
    [ValidateInput(false)] 
    public void ExportExcel(string aContent) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append(aContent); 

     Response.ClearContent(); 
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=ProjectData.xls"); 
     Response.Write(sb); 
     Response.End(); 
    } 

这是jQuery的东西:

// namespace 
var excel = excel || {}; 

$(document).ready(function() { 
    $('#ExcelUrl').on('click', function() { 
     var table = $('#tableName').val(); 
     var content = $('#' + table).html(); 
     excel.utilFunctions.exportToExcel(content); 
    }); 
}); 

excel.utilFunctions = (function ($) { 
    var exportToExcel = function (content) { 
     $.ajax({ 
      url: "/Home/ExportExcel", 
      type: "POST", 
      data: { aContent: content } 
     }).done(function(data) { 
      alert(data); 
     }).fail(function(error) { 
      alert(error.responseText); 
     }); 
    }; 

    //public functions 
    return { 
     exportToExcel: exportToExcel 
    }; 
})(jQuery); 

任何帮助表示赞赏。

回答

0

找到了解决方案。显然,由于jQuery正在做这个帖子,所以无论你做什么,都不会生成文件。

我改变了jQuery函数来创建并提交一个隐藏的表单域,其中包含我的数据。

$(document).ready(function() { 
    $('#ExcelUrl').on('click', function() { 
     var table = $('#tableName').val(); 
     var content = $('#' + table).html().replace(/\s/g, ""); 
     excel.utilFunctions.exportToExcel(content); 
    }); 
}); 

excel.utilFunctions = (function ($) { 
    // Excel export function 
    var exportToExcel = function (content) { 
     var form = $("<form></form>"); 
     form.attr("method", "POST"); 
     form.attr("action", "/Home/ExportExcel"); 
     var dataField = $("<input/>"); 
     dataField.attr("type", "hidden"); 
     dataField.attr("name", "aContent"); 
     dataField.attr("value", content); 
     form.append(dataField); 
     $(document.body).append(form); 
     form.submit(); 
    }; 

    //public functions 
    return { 
     exportToExcel: exportToExcel 
    }; 
})(jQuery); 

然后我改变了ExportExcel控制器函数返回一个FileStreamResult

public FileStreamResult ExportExcel(string aContent) 

和改性执行实际导出代码

var byteArray = Encoding.ASCII.GetBytes(aContent); 
var stream = new MemoryStream(byteArray); 

return File(stream, "application/ms-excel", "FileName.xls");