我在MVC 3项目中有一个上传功能,用于将文件存储在数据库中。我正在尝试编写代码,列出数据库中的所有文件,并提供下载每个文件的链接,但我没有取得多大成功。这是控制器代码:
public ActionResult Download(int id)
{
var db = GetDataContext();
var file = db.UserFiles.First(f => f.ID == id);
return File(file.Data.ToArray(), "application/octet-stream", file.Name);
}
public ActionResult Index()
{
var db = GetDataContext();
var files = db.UserFiles.Select(f => new FileViewModel { ID = f.ID, Name = f.Name });
return View(files);
}
我已经从ActionResult索引创建了一个视图,视图中的代码是:
@Html.ActionLink("Lesson", "Download", "Upload", new { id = 1 })
我还创建了一个名为FileViewModel的类文件,用于防止在列出文件时从数据库中检索数据:
public class FileViewModel
{
public int ID { get; set; }
public string Name { get; set; }
}
在我将列出文件的下载视图中,我有:
@model IEnumerable<DFPProductions_Default.Models.FileViewModel>
点击链接后我得到的错误是: 参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'DFPProductions_Default.Controllers.UploadController'中方法'System.Web.Mvc.ActionResult Download(Int32)'。
请帮我发现我做错了什么。 谢谢, 艾米
答案 0 :(得分:0)
问题似乎是你没有向Controller发送任何ID。
试着给你打电话:
@Html.ActionLink("Lesson", "Download", "Upload", new { id = 1 }, null)
此外,为了将来参考,您应该将控制器保持在最低限度,不要与数据库进行交互。