C# 访问包含FileInfo实例的ViewModel时发生NullReferenceException

C# 访问包含FileInfo实例的ViewModel时发生NullReferenceException,c#,asp.net,asp.net-mvc,nullreferenceexception,C#,Asp.net,Asp.net Mvc,Nullreferenceexception,我不认为我的问题是独一无二的,但我会问,因为我的问题可能有一些特殊之处。我有一个商业模式,从文件夹加载文件,并将其显示在网页上,以进行编辑和其他所需操作。我的控制器按如下方式调用此模型: 这是处理文件列表并返回fileinfo对象枚举的方法 public IEnumerable<FileInfo> ListUploadedFiles(HttpContextBase htc) { //list all the files from the upload

我不认为我的问题是独一无二的,但我会问,因为我的问题可能有一些特殊之处。我有一个商业模式,从文件夹加载文件,并将其显示在网页上,以进行编辑和其他所需操作。我的控制器按如下方式调用此模型: 这是处理文件列表并返回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();
    }
public IEnumerable ListUploadedFiles(HttpContextBase htc)
{
//列出上载目录中的所有文件
var path=htc.Server.MapPath(“~/FileUpload”);
var di=新目录信息(路径);
返回di.EnumerateFiles();
}
这是控制器操作中的代码,它应该填充viewmodel,并向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);
var viewmodel=newlist();
var files=uploader.ListUploadedFiles(上下文);
foreach(文件中的var项)
{
添加(新上载的图像视图模型()
{
ImageName=项目名称,
CreatedOn=item.CreationTime,
ImageSize=项目长度,
FileType=item.Extension
});
}
返回视图(“列表文件”,视图模型);
现在在我的视图中,我这样做是为了在视图上列出所需的属性:

@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>
}
@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>
}
@使用SeeSite.Models
@模型IEnumerable
@{
ViewBag.Title=“上传”;
}
@foreach(上传模型中的ImageViewModel项)
{
  • @items.ImageName
  • }
    但我一直得到一个例外:

    System.NullReferenceException:对象引用未设置为实例 指一个物体

    并指向我的foreach开始的那条线。现在我想澄清一下,如果我使用ViewBag,它可以正常工作,尽管我只能访问一个文件的详细信息,但使用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>
    }
    
    @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>
    }
    
    @foreach(新目录信息(Server.MapPath(“~/FileUpload”)中的var dir)
    .EnumerateFiles())
    {
    
  • @目录名称| |
  • }

    它起作用了。那么,我是在这里遗漏了什么,还是这是做我想做的事情的最佳解决方案?

    几乎所有
    NullReferenceException
    的情况都是一样的。请参见“”,以获得一些提示。您可以将视图
    @model
    更改为
    List
    并查看发生了什么情况吗?@saagar elias jacky感谢您的编辑…kamo-Thank将尝试并抱歉我住的internet不总是打开