NullReferenceException访问包含FileInfo实例

时间:2015-05-08 02:01:47

标签: c# asp.net asp.net-mvc nullreferenceexception

我不认为我的问题是独特的,但我会问,因为我的问题可能存在一些特殊性。我有一个商业模型,可以从文件夹加载文件,并在网页上显示它们,以便进行编辑和其他所需的操作。我的控制器就像这样调用这个模型: 这是处理文件列表并返回fileinfo对象枚举的方法

    public IEnumerable<FileInfo> ListUploadedFiles(HttpContextBase htc)
    {
        //list all the files from the upload directory
        var path = htc.Server.MapPath("~/FileUpload");
        var di = new DirectoryInfo(path);
        return di.EnumerateFiles();
    }

这是控制器操作中应该填充视图模型的代码,并向viewmodel传递一个视图,这是我遇到一些问题的地方。

            var viewmodel = new List<UploadedImageViewModel>();

        var files = uploader.ListUploadedFiles(context);

        foreach (var item in files)
        {
            viewmodel.Add(new UploadedImageViewModel()
            {
                ImageName = item.Name,
                CreatedOn = item.CreationTime,
                ImageSize = item.Length,
                FileType = item.Extension
            });
        }

        return View("ListFiles", viewmodel);

现在在我看来,我这样做是为了在视图中列出所需的属性:

@using SeeSite.Models
@model IEnumerable<UploadedImageViewModel>

@{
    ViewBag.Title = "Upload";
}
@foreach(UploadedImageViewModel items in Model)
{
  <li>@items.ImageName <span><a href="#details">Details</a></span>
  <span><a href="#rename">Rename</a></span>
  </li>
}

但我一直有例外:

  

System.NullReferenceException:未将对象引用设置为实例   一个对象。

并指向我的foreach开始的那一行。现在只是为了清理,如果我使用ViewBag它工作正常虽然我只能访问一个文件的细节,但使用viewmodel只是不起作用。被困在这里一整天,不想浪费时间。可能有什么问题?!

哦,如果我在视图中这样做:

@foreach (var dir in new DirectoryInfo(Server.MapPath("~/FileUpload"))
              .EnumerateFiles())
{
     <li>@dir.Name <span>|</span><a href="#">Details</a> 
     <span>|</span> <a href="#">Rename</a></li>
}

它有效。所以我在这里遗漏了一些东西,或者这是我做我想做的最好的解决方案吗?

0 个答案:

没有答案