2

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

这适用于单个附件...

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

4

2 回答 2

1

遍历所有文档并构建一个 zip 文件(最好支持),然后将其发送给用户。

只需在您的控制器上实现不同的操作,调用它DownloadAll。遍历 Model.Attachments 中的所有文件,并将它们添加到 ZIP 包中,然后返回,就像DownloadViewDocument.

如果您使用 .NET 4.5 或其他版本,请查看ZipArchive http://msdn.microsoft.com/en-us/library/hh137435ZipPackage。请参阅如何在不使用 3rd-party API 的情况下使用 C# 压缩文件?了解更多信息。

于 2013-09-04T11:20:59.297 回答
0

解决此问题的“正确”方法是使用“多部分”内容类型输出文件,例如通过输出标题

Content-Type: multipart-mixed

然后以适当的边界单独输出每个文件。但是,对此的支持非常有限 - 在一个类似的问题中,浏览器支持被证明非常弱。

因此,根据我最初的评论,您最好的方法是使用诸如DotNetZip 之类的库将所有文件组合成一个 ZIP 文件,从而允许用户下载此文件。

于 2013-09-04T11:29:26.953 回答