即使在构造函数中初始化后,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();
}
快速修复
我有以下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();
}
快速修复