1

我试图实现的是让用户能够在文件保存对话框的帮助下将网格数据导出到 excel 文件并下载它。

这是我现在的编码方式 -

在 Javascript -

$.post("/irn/Identifier/Download", { "columnValues": columnValues });

在标识符控制器下载动作 -

public FileResult Download(string columnValues)
{
    DTData headlineRows = (DTData)Newtonsoft.Json.JsonConvert.DeserializeObject(columnValues, typeof(DTData));
    var e = new Services.DownloadToExcel();
    return File(e.WriteData(headlineRows), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "testfile.xlsx");
}

在 DownloadToExcel 类中,在 WriteData 函数中我有 -

//Here, I'm using the EPPlus library to write the column data to an excel file and then i'm returning the data as a byte array -

//Some code that writes the data
return packages.GetAsByteArray();

当我运行此代码时,我希望在浏览器中看到一个文件保存对话框,但没有任何反应。C# 或 JavaScript 端没有任何错误。谁能告诉我我做错了什么?

4

4 回答 4

0

有点晚了,但我遇到了类似的问题。为了解决这个问题,我在客户端使用 JSON.stringify(columnValues) 将我的数据转换为 json 字符串,然后再将其发送到控制器。

然后而不是使用

$.post("/irn/Identifier/Download", { "columnValues": columnValues });

尝试

var columnValuesString = JSON.stringify(columnvalues);
window.location = '/irn/Identifier/Download?columnvalues=" + columnValuesString';

将 $.post() 更改为 window.location 使其工作。

然后你可以反序列化控制器中的 json 字符串,点击链接后应该会出现打开/保存对话框。

我希望这对其他人有帮助。让我知道,如果需要,我可以发布我的代码。

谢谢。

于 2013-04-08T11:39:51.780 回答
0

如果您在 Internet Explorer 中测试该站点,请尝试以下操作:

  • 打开 Internet 选项 -> 高级。单击重置。您还可以选择恢复高级设置。

  • 打开 Internet 选项 -> 安全。如果区域已被更改,请单击“将所有区域重置为默认级别”。

对这些设置的更改可能会影响 Internet Explorer 是否接受文件下载。

更多信息在这里: http ://answers.microsoft.com/en-us/ie/forum/ie8-windows_other/ie-8-will-not-let-me-download-any-files-music-pdf/bc59ba24- 866b-4dbf-93f2-85ebb9912c2c

于 2013-04-10T19:52:32.643 回答
0

您应该使用 IFrame 来帮助下载文件。

function postToIframe( url,data) {
    var target = "downloadIFrame";
    $('<iframe  name="' + target + '" style="display:none"/>').appendTo('body');
    $('body').append('<form action="' + url + '" method="post" target="' + target + '" id="postToIframe"></form>');
    $.each(data, function (n, v) {
        $('#postToIframe').append('<textarea name="' + n + '">' + v + '</textarea>');
    });
    $('#postToIframe').submit().remove();
}
于 2015-07-21T10:01:20.777 回答
-1

我解决了这个问题,但忘了在这里更新 -

这有效 -

在我的课堂上——

private const string MimeType = "application/vnd.openxmlformats- 
officedocument.spreadsheetml.sheet";

private ExcelPackage package = new ExcelPackage();

private FileContentResult excelFile;

Write data using EPPlus

 ...

 ...

 ...

excelFile = File(package.GetAsByteArray(), MimeType, FileName);

 return excelFile;
于 2013-04-15T20:29:03.830 回答