繁体   English   中英

ASP.Net MVC显示存储的.zip文件并允许从数据库下载

[英]ASP.Net MVC displaying stored .zip files and allowing downloading from database

我有一个分配模型,该模型将StudentName和.zip文件(以及其他项目)存储到数据库中。 我已经测试了我的Create方法,并且它设法使用选定的相应File创建Assignment并将其上传到数据库进行存储。 该部分正常工作。 我在将视图中的存储文件显示为可下载链接时遇到问题。

这是数据库的设置方法。

作业表:

在此处输入图片说明

文件表:

在此处输入图片说明

“文件”表中的“文件”通过外键关系将关系与工作分配关联,其中“工作分配ID”存储在数据库的每个文件条目中。

当我运行它并创建一个Assignment并查看Database中的表值时,我可以看到文件正在上载和存储以及已创建的关系。 这是我的模型的外观。

分配模型:

namespace ProjectVoting.Models
{
    public class Assignment
    {
        [Key]
        public int Id { get; set; }
        public string StudentName { get; set; }
        public int Votes { get; set; }

        public virtual ICollection<File> Files { get; set; }
    }
}

文件模型:

namespace ProjectVoting.Models
{
    public class File
    {
        public int FileId { get; set; }
        [StringLength(255)]
        public string FileName { get; set; }
        [StringLength(100)]
        public string ContentType { get; set; }
        public byte[] Content { get; set; }
        public FileType FileType { get; set; }
        public int AssignmentId { get; set; }
        public virtual Assignment Assignment { get; set; }
    }
}

FileType类别:

namespace ProjectVoting.Models
{
    public enum FileType
    {
        Project = 1, ZipFile
    }
}

在分配模型的索引视图中,我试图显示StudentName,File和Edit / Details / Delete链接的列表。 这是我设置视图的方式。

分配/索引视图:

@model IEnumerable<ProjectVoting.Models.Assignment>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.StudentName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Votes)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.StudentName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Votes)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Files)
        </td>

        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>

注意,我正在使用@ Html.DisplayFor(modelItem => item.Files)尝试显示从数据库到文件的下载链接。 但是,当我进入索引页面时,它显示如下:

在此处输入图片说明

在表中显示从数据库中到文件的可下载链接的正确方法是什么?

您需要在控制器内部创建其他操作方法以下载文件。

在这种情况下,您需要在视图中替换

@Html.DisplayFor(modelItem => item.Files)

带循环,每个文件都有下载链接

@foreach(var file in item.Files)
{
    @Html.ActionLink("Download "+file.FileName, "Download", new { id=file.FileId })
}

并在您的控制器中添加新操作

public ActionResult Download(int id)
{
    //get File by fileId
    var file = ........
    byte[] contents = file.Content;
    return File(contents, file.ContentType)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM