解决视图模型无法实例化问题

有一视图模型——控制器先获取数据库中的信息,再将信息通过构造函数参数传递给这个视图模型,视图模型拿到数据后在类内生成对应的List<SelectItem>列表实例,这一顿操作的目的是在视图中生成对应本模型某属性的DropDownList

模型的构造函数一开始是这么写的:

但是在页面将信息post回控制器时,会报“无法将模型实例化”的错误:

InvalidOperationException: Could not create an instance of type ‘[我的模型]’. Model bound complex types must not be abstract or value types and must have a parameterless constructor. Alternatively, give the ‘[我的模型实例]’ parameter a non-null default value.

Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder.CreateModel(ModelBindingContext bindingContext)

之后尝试过将列表直接给ViewBag,但是不能实现模型的绑定(假如数据库中用户的性别为男,在页面生成后DropDownList无法直接显示“男”),或许有其他方法(比如在Controller先对List进行IsSelected处理,但是比较繁琐),没有进行更多尝试(其实就是想一个模型就完事)。

之后在StackOverflow找到解决方法:Passing data into an Asp.Net Core bound model

解决方法很简单,将带参数的构造函数写为重载函数:

回答者的解释:

在模型绑定过程中,引擎不能识别带参数的构造函数

原文:during model binding engine can’t identify with parameter constructor.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据