Я получаю эту ошибку при попытке создать объект при использовании списков DropDown и ListBox
System.NullReferenceException System.Web.Mvc.WebViewPage.Model.get вернул ноль.
Модель
public class Game
{
[Key]
public int Id { get; set; }
public string Title { get; set; }
public Publisher Publishers { get; set; }
public int PublisherID { get; set; }
public List<Category> Categories { get; set; }
public string ImageLink { get; set; }
public Game()
{
Categories = new List<Category>();
}
}
Просмотр модели
public class GameViewModel
{
public int Id { get; set; }
public string Title { get; set; }
public object Category { get; set; }
public Publisher Publisher { get; set; }
public string ImageLink { get; set; }
public GameViewModel(int id, string title, List<Category> category, Publisher publisher, string imageLink)
{
this.ID = id;
this.Title = title;
this.Category = category;
this.Publisher = publisher;
this.ImageLink = imageLink;
}
Создать модель представления
public class CreateGameViewModel{
public Game Game { get; private set; }
public List<SelectListItem> Categories { get; private set; }
public List<SelectListItem> Publishers { get; private set; }
public int[] SelectedCategory { get; set; }
public CreateGameViewModel()
{
this.Game = new Game();
}
public CreateGameViewModel(List<Models.Category> categories, List<Models.Publisher> publishers)
{
Categories = categories.Select(c => new SelectListItem() { Text = c.Name, Value = c.Id.ToString() }).ToList();
Publishers = publishers.Select(p => new SelectListItem() { Text = p.Name, Value = p.Id.ToString() }).ToList();
}
}
Мой контроллер
GET
public ActionResult Create()
{
var publishers = _db.Publishers.ToList();
var categories = _db.Categories.ToList();
var gameVM = new CreateGameViewModel(categories: categories, publishers: publishers);
return View(gameVM);
}
POST
[HttpPost]
public ActionResult Create(CreateGameViewModel game)
{
try
{
var categories = _db.Categories.Where(c => game.SelectedCategory.Contains(c.Id)).ToList();
game.Game.Categories = categories;
_db.Games.Add(game.Game);
_db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Мой взгляд (где появляется ошибка)
@Html.DropDownListFor(m => m.Game.PublisherID, Model.Publishers)
@Html.ListBoxFor(m => m.SelectedCategory, Model.Categories)
У меня также есть редактор для id и PublisherID в этом представлении создания, что, конечно, не правильно, но я не уверен, где точно определить эту проблему, пока существует другая.
Может ли кто-нибудь взглянуть на этот код?