即使在构造函数中初始化后,SelectList 也会抛出 "Object reference not set" 错误

SelectList throwing "Object reference not set" error even after initializing in Constructor

我有以下Model

public class UploadImageAlbum
{
    public UploadImageAlbum()
    {
       Albums = new SelectList(Enumerable.Empty<SelectListItem>());
    }
    public List<HttpPostedFileBase> Images { get; set; }

    public string AlbumID { get; set; }
    public SelectList Albums { get; set; }
}

public class Album
{
   public string AlbumID { get; set; }
   public string AlbumName { get; set; }
}

public class Repository
{
   public static List<Album> FetchAlbums()
   {
        List<Album> albums = new List<Album>
        {
            new Album(){ AlbumID = "Album1", AlbumName = "Album 1 desc"},
            new Album(){ AlbumID = "Album2", AlbumName = "Album 2 desc"}
        };
        return albums;
    }
}

我在一个名为 AdminViewModel 的单独模型中将其称为 UploadImageAlbum,如下所示:

public class AdminViewModel
{
    public UploadImageAlbum UIAModel { get; set; }
}

Controller 中,我尝试按如下方式填写此 model

public PartialViewResult GetMediaUploadView()
{
   AdminViewModel model = new AdminViewModel();
   List<Album> albums = Repository.FetchAlbums();
   model.UIAModel.Albums = new SelectList(albums, "AlbumID", "AlbumName");//Error here
   //Object reference not set to an instance of the object
   return PartialView("_UploadMedia", model);
}

我也试过了

public PartialViewResult GetMediaUploadView()
{
   AdminViewModel model = new AdminViewModel();
        List<Album> albums = new List<Album>(); //Creating as new List
        albums = Repository.FetchAlbums();//then assign
        model.UIAModel.Albums = new SelectList(albums, "AlbumID", "AlbumName");
        return PartialView("_UploadMedia", model);
}

但是,我又遇到了同样的错误。不知道为什么我会收到此错误,即使在模型级别和控制器级别初始化之后也是如此。希望有人对此有很好的了解。下面是我遇到的错误的屏幕截图。

更新

好吧,我不认为这是重复的,因为我太清楚有 'n' 个问题基于 null reference,但是我们得到的水平 null reference 是使这个问题独一无二的原因。另外我的印象是,SelectList 正在抛出错误,结果这里的问题有所不同。所以我支持我的问题

你的 AdminViewModel 有一个 属性:

public class AdminViewModel
{
    public UploadImageAlbum UIAModel { get; set; }
}

然后:

AdminViewModel model = new AdminViewModel();
//..
model.UIAModel.Albums = //...

你还没有初始化UIAModel,他正在抛出错误。


如果您在 C#6,您可以简单地使用:

public class AdminViewModel
{
    public UploadImageAlbum UIAModel { get; set; } = new UploadImageAlbum();
}

快速修复