[英]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.