使用Html.ActionLink为用户提供“全部下载”选项

时间:2013-09-04 11:13:20

标签: c# html5 asp.net-mvc-4

快速提问,我想让用户从我的详细信息视图中下载所有附件。

这适用于单个附件......

    @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视图)

2 个答案:

答案 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文件,允许用户下载。