快速提问,我想让用户从我的详细信息视图中下载所有附件。
这适用于单个附件......
@foreach (var file in Model.Attachments)
{
<div class="margin-bottom-25">
<a href="?">
<img src="~/Images/pdf.gif" /></a>
<div>
<strong>@file.FileName</strong>
<span>@file.FileSizeKB KB</span>
@Html.ActionLink("Download", "ViewDocument", new
{
messageId = file.MessageId.ToString("N"),
documentId = file.ID.ToString("N"),
documentType = file.AttachmentType.ToString(),
download = true
})
</div>
</div>
}
但是我想让用户能够选择“全部下载”链接....? 听起来很直接,但我尝试将foreach放在链接中,这是一个没有跑步者......任何想法都赞赏? (asp.net MVC 4应用程序,使用razor2视图)
答案 0 :(得分:1)
迭代所有文档并构建一个随后发送给用户的zip文件(最受支持)。
只需在您的控制器上执行不同的操作,将其命名为DownloadAll
。循环遍历Model.Attachments中的所有文件,并将它们添加到ZIP包中,然后返回,就像Download
上的ViewDocument
一样。
如果您使用的是.NET 4.5或ZipArchive
,请查看ZipPackage
http://msdn.microsoft.com/en-us/library/hh137435。有关详细信息,请参阅How do I ZIP a file in C#, using no 3rd-party APIs?。
答案 1 :(得分:0)
解决此问题的“正确”方法是使用“multipart”Content-Type输出文件,例如输出
标题Content-Type: multipart-mixed
然后使用适当的边界单独输出每个文件。但是,对此的支持非常有限 - 在similar question here浏览器支持中显示非常弱。
因此,根据我原来的评论,您最好的方法是使用DotNetZip这样的库将所有文件合并为一个ZIP文件,允许用户下载。