下载上传的文件MVC 3

时间:2011-08-22 12:31:36

标签: asp.net-mvc asp.net-mvc-3 file-upload

我在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)'。

请帮我发现我做错了什么。 谢谢, 艾米

1 个答案:

答案 0 :(得分:0)

问题似乎是你没有向Controller发送任何ID。 试着给你打电话: @Html.ActionLink("Lesson", "Download", "Upload", new { id = 1 }, null)

此外,为了将来参考,您应该将控制器保持在最低限度,不要与数据库进行交互。