Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net MVC 4导出为CSV-另存为对话框在Chrome和Firefox中不工作_Asp.net_Asp.net Mvc 4_Http Headers_Download - Fatal编程技术网

Asp.net MVC 4导出为CSV-另存为对话框在Chrome和Firefox中不工作

Asp.net MVC 4导出为CSV-另存为对话框在Chrome和Firefox中不工作,asp.net,asp.net-mvc-4,http-headers,download,Asp.net,Asp.net Mvc 4,Http Headers,Download,我正在尝试使用“打开/保存”选项将csv文件导出到用户 我的问题类似于(在Chrome和Firefox中下载文件),我尝试了@Dev建议的解决方案,但它不起作用 我写的代码如下:- return File(new System.Text.UTF8Encoding().GetBytes(csvData), "text/csv", filename); 但是,它在Chrome中不起作用。默认情况下,正在下载该文件 在谷歌搜索之后,我发现,我正试图从中做如下事

我正在尝试使用“打开/保存”选项将
csv
文件导出到用户

我的问题类似于
(在Chrome和Firefox中下载文件)
,我尝试了
@Dev
建议的解决方案,但它不起作用

我写的代码如下:-

return File(new System.Text.UTF8Encoding().GetBytes(csvData),
                    "text/csv", filename);
但是,它在Chrome中不起作用。默认情况下,正在下载该文件

在谷歌搜索之后,我发现,我正试图从中做如下事情:-

var csvData = "hello";// I am filling this variable with ,y values from DB!
    var cd = new System.Net.Mime.ContentDisposition
    {
        // for example foo.bak
        FileName = "test",
        Inline = false,
    };
    Response.AppendHeader("Content-Disposition", 
        cd.ToString());
    return File(new System.Text.UTF8Encoding().GetBytes(csvData),
        "text/csv");
但它仍然在用Chrome下载文件。然后我发现,
@JoãoSimões
提到:-

这取决于浏览器。如果设置为自动下载到 给定文件夹,浏览器将自动下载。Firefox和 Chrome是一些具有这种行为的浏览器João Simões 1月3日在 13:09

如果以上是真的,那么我该如何克服我的问题呢?如何获取打开/保存对话框? 我无法使用“打开/保存”选项导出我的CSV

编辑1

我试着做这样的事情(明白了):-

和我的控制器代码:-

return new ExcelResult
                {
                    FileName = "sample.xls",
                    Path = "",
                    Data = csvData
                };
但是,它仍然在下载Excel

编辑2

尝试使用
HttpContext.Current.Response打开excel

/// <summary>
/// Export CSV 
/// </summary>
/// <returns></returns>
public void DownloadCSV()
{
    try
    {
        var csvData = Session["CSVData"].ToString();


        byte[] getContent = new System.Text.UTF8Encoding().GetBytes(csvData);
        System.Web.HttpContext.Current.Response.ClearContent();
        System.Web.HttpContext.Current.Response.ClearHeaders();
        System.Web.HttpContext.Current.Response.Buffer = true;
        System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
        System.Web.HttpContext.Current.Response.AddHeader("Content-Length", getContent.Length.ToString());
        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + "testing.csv");
        System.Web.HttpContext.Current.Response.BinaryWrite(getContent);
        System.Web.HttpContext.Current.Response.Flush();

    }
    catch (Exception ex)
    {
        HttpResponseMessage message = new HttpResponseMessage()
        {
            Content = new StringContent("Error Exporting Data")
        };

        throw new System.Web.Http.HttpResponseException(message);

    }

}
//
///导出CSV
/// 
/// 
公开作废下载CSV()
{
尝试
{
var csvData=Session[“csvData”].ToString();
byte[]getContent=new System.Text.UTF8Encoding().GetBytes(csvData);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ClearHeaders();
System.Web.HttpContext.Current.Response.Buffer=true;
System.Web.HttpContext.Current.Response.ContentType=“应用程序/vnd.ms excel”;
System.Web.HttpContext.Current.Response.AddHeader(“Content-Length”,getContent.Length.ToString());
System.Web.HttpContext.Current.Response.AddHeader(“内容处置”、“附件;文件名=“+”testing.csv”);
System.Web.HttpContext.Current.Response.BinaryWrite(getContent);
System.Web.HttpContext.Current.Response.Flush();
}
捕获(例外情况除外)
{
HttpResponseMessage=新的HttpResponseMessage()
{
内容=新的StringContent(“导出数据时出错”)
};
抛出新的System.Web.Http.HttpResponseException(消息);
}
}
但是,还是不行

尝试为您的内容处置标题添加以下内容:

Response.AppendHeader("Content-Disposition", "attachment");
@你们试过第二种解决方案了吗?他们把图片放在展示如何在chrome中打开对话框的地方。我有chrome版本30.0.1599.101 m,如果你去设置在那个预先设置,然后下来你会发现复选框,这是在上面的链接中给出的答案,这将解决你的问题,我想。 如果仍然无法工作,则可能是您的浏览器有问题,请将其更新为最新版本,然后重试。 编辑1: 如果您将文件扩展名设置为.xls,那么它将在excel for csv中打开。您需要将文件名设置为
FileName=“sample.csv”,
然后它将以csv格式打开

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewtoCSVExport.csv");
Response.Charset = string.Empty;
Response.ContentType = "application/text";

有关详细信息,请检查此项

如果用户已将其浏览器配置为自动下载文件,则在服务器上绝对无法强制显示此对话框。恐怕您试图实现的目标是不可能的。

它仍在下载文件:(当您从任何其他页面下载csv/xls文件时,是否会出现“打开/保存”对话框?如果不是,则可能不是您的代码,而是浏览器设置。@developer10214:-您发布的链接,我收到了对话框。我想可能是我的代码问题,也可能是外星人攻击!!!我仍在挠头。。您的代码性能良好很好。这取决于浏览器设置。没有办法解决这个问题,你不能/不应该试图覆盖用户的浏览器设置,因为这就像黑客入侵机器一样。你说它仍在下载是什么意思?Chrome、Safari和Firefox将直接将文件下载到下载文件夹。除非用户同意,否则它不会请求保存对话框t单击链接并单击“另存链接为”。另一个选项是使用文件API。@AkashKava-真的!我明白了。但应该有某种东西可以让我们覆盖该功能。或者换句话说,@Poornima说,
我想覆盖浏览器设置。
根据她的破解方法!是的,我已经尝试过了。我尝试过了两天前,当
@developer10214
建议这可能是浏览器问题!!但是,它不起作用。我甚至卸载了chrome并重新安装了它…:(我卸载并安装了我的chrome,以获得最新版本,因为它没有更新。但没有成功。我只是尝试了硬编码文件名,但没有结果。让我们看看,我已经联系了我的网络团队,如果他们做了一些可疑的事情。grrrr…谢谢你的建议satish!非常感谢。尝试添加此代码并检查它是否可能会有问题。)正在工作
Response.Output.Write(getContent.ToString());Response.Flush();Response.End()
可能会晚。但经过大量努力,我还是没能得到它。感谢我的上司理解了这个问题。您的链接有助于理解问题。感谢您的努力+1。将要求您更新答案,突出显示链接:)你可能是对的!在我搔了9天的头之后,我也有同样的感觉。让我想想,如果我能找到其他解决办法的话。谢谢!
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewtoCSVExport.csv");
Response.Charset = string.Empty;
Response.ContentType = "application/text";