Не удалось создать экземпляр отношения .ViewModels.AddGameViewModel. Сложные типы, связанные с моделью, не должны быть абстрактными или значениями и должны иметь конструктор без параметров.
Давайте попробуем устранить эту ошибку.
Не удалось создать экземпляр отношения .ViewModels.AddGameViewModel.
Довольно очевидно: компоненты привязки к модели пытаются создать экземпляр вашего типа, но не удалось.
Связанные с моделью сложные типы
«Привязка к модели» означает, что они связаны конвейером ASP.NET. «сложные типы» - это в основном любые типы, которые не являются «базовыми», как string
или int
. Ваши классы моделей являются сложными типами.
не должно быть абстрактным
Система привязки к модели захочет иметь возможность создавать экземпляры класса, поэтому она не может быть абстрактной; это должно быть конкретным. Все показанные вами типы являются конкретными, поэтому это не проблема.
или типы значений
Вы не можете использовать struct
типы с привязкой к модели; это только одно из его ограничений. К счастью, все ваши типы - это классы, поэтому вы можете игнорировать это.
и должен иметь конструктор без параметров.
ASP.NET не знает, как передавать параметры конструкторам моделей. Он может делать только эквивалент new T()
, поэтому все типы вашей модели должны определять конструктор с нулевыми параметрами. Это причина, по которой вы видите ошибку; Ваш AddGameViewModel
класс определяет только этот конструктор:
public AddGameViewModel(IEnumerable<GameCategory> categories)
Одна из особенностей языка C # заключается в том, что когда вы не указываете конструктор вручную, он добавляет для вас конструктор по умолчанию. Когда вы определяете конструктор в своем коде, этот конструктор по умолчанию не добавляется.
Во всех других ваших моделях вы не определяете никаких конструкторов, поэтому компилятор добавляет для вас компилятор по умолчанию. В случае AddGameViewModel
вы добавили конструктор, поэтому для решения проблемы вы также должны добавить конструктор по умолчанию:
public AddGameViewModel()
{
}