Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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
C# 正确填充Zip后未下载Zip文件,但contentlength为空_C#_Asp.net_Ajax_Asp.net Mvc_Dotnetzip - Fatal编程技术网

C# 正确填充Zip后未下载Zip文件,但contentlength为空

C# 正确填充Zip后未下载Zip文件,但contentlength为空,c#,asp.net,ajax,asp.net-mvc,dotnetzip,C#,Asp.net,Ajax,Asp.net Mvc,Dotnetzip,在我的页面上,我目前有以下内容:带有一些发票的webgrid,对于每个发票,我都有一个复选框,对于每个发票,我都有一个pdf图标,可以在浏览器中查看pdf或下载pdf 我试图做到的是,用户可以检查一些发票,然后点击下面的按钮将这些发票下载为ZIP文件 单击按钮时,将调用jquery函数,该函数将对我的ASP.net进行AJAX调用。我传递了发票对应ID的arrayparameter jQuery-Ajax调用 此函数按预期工作,在控制器中接收阵列。下一步是获取相应的文件(来自数据库的base64

在我的页面上,我目前有以下内容:带有一些发票的webgrid,对于每个发票,我都有一个复选框,对于每个发票,我都有一个pdf图标,可以在浏览器中查看pdf或下载pdf

我试图做到的是,用户可以检查一些发票,然后点击下面的按钮将这些发票下载为ZIP文件

单击按钮时,将调用jquery函数,该函数将对我的ASP.net进行AJAX调用。我传递了发票对应ID的arrayparameter

jQuery-Ajax调用 此函数按预期工作,在控制器中接收阵列。下一步是获取相应的文件(来自数据库的base64)转换这些文件并将这些文件放入ZIP。这同样有效,当我检查ZIP的条目时,它有正确的内容

控制器 我需要的最后一步是,用户看到保存zip文件的弹出窗口,但这不会发生。当我检查我的调试器时,ajaxcall成功完成。当我检查调试器(标头)时,我看到请求,但响应标头显示contentlength:0

我错过了什么,在网上找不到任何解决方案。希望你能帮助我

提前谢谢

编辑 {FileDownloadName=“发票”}


当删除这段代码时,我的contentlength不再是0。但是现在如何下载这个文件呢?请求发送的内容看起来像文件,但下载文件的弹出窗口没有显示

Ajax不允许下载文件。这是出于安全考虑


所以要下载文件,不要使用AJAX。创建指向服务器端脚本的锚点,该脚本为要下载的文件提供服务。

Ajax不允许下载文件。这是出于安全考虑


所以要下载文件,不要使用AJAX。创建一个指向服务器端脚本的锚点,该脚本为要下载的文件提供服务。

zip文件应该位于
数据
,即事件的参数
done
,但是在进行ajax查询时,您将不会看到用户下载文件的弹出窗口

在我方便的情况下,您可以做两个选择,第一个是使用表单发送数据,并在属性
target
中将值
\u blank
放入一个新窗口,或者将例如
mywindow
放入
窗口。打开

window.open('about:blank', 'mywindow');

第二个选项是通过ajax发送数据并接收一个json对象,如果操作正常或失败,则将文件保存在某个位置,然后在ok响应中,您可以发送一个
id
,然后执行与第一个选项类似的操作,但确保文件生成良好,在控制器中的其他操作中,接收
id
并发送
zip
文件。

zip
文件应该位于
data
中,即事件
done
的参数,但在进行ajax查询时,您将不会看到用户下载文件的弹出窗口

在我方便的情况下,您可以做两个选择,第一个是使用表单发送数据,并在属性
target
中将值
\u blank
放入一个新窗口,或者将例如
mywindow
放入
窗口。打开

window.open('about:blank', 'mywindow');

第二个选项是通过ajax发送数据并接收一个json对象,如果操作正常或失败,则将文件保存在某个位置,然后在ok响应中,您可以发送一个
id
,然后执行与第一个选项类似的操作,但确保文件生成良好,在控制器中的其他操作中,接收
id
并发送
zip
文件。

也许我错了,但在我看来,在发送内容之前,您需要将内存流倒回开头, 加一

以前

outputStream.WriteTo(Response.OutputStream);

然后再试一次:)

也许我错了,但在我看来,在发送内容之前,您需要将内存流倒回开头, 加一

以前

outputStream.WriteTo(Response.OutputStream);
然后重试:)

outputStream.WriteTo(Response.OutputStream);