我不认为我的问题是独特的,但我会问,因为我的问题可能存在一些特殊性。我有一个商业模型,可以从文件夹加载文件,并在网页上显示它们,以便进行编辑和其他所需的操作。我的控制器就像这样调用这个模型: 这是处理文件列表并返回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>
}
它有效。所以我在这里遗漏了一些东西,或者这是我做我想做的最好的解决方案吗?