ASP.NET MVC 5.2 POST提交模型时出现无参构造函数缺失错误
问题分析与解决:ASP.NET MVC提交表单抛出MissingMethodException
核心问题定位
报错提示的No parameterless constructor defined for this object指向的不是AdminController,而是你提交时绑定的CheckInventoryQueryModel模型。ASP.NET MVC的模型绑定器在实例化接收参数的模型时,默认要求模型类必须具备公共无参构造函数,和控制器是否有无参构造函数无关。
常见原因与解决方法
原因1:模型仅定义了带参数的构造函数
如果CheckInventoryQueryModel只写了带参构造,没有显式定义无参构造,C#编译器不会自动生成默认无参构造,导致模型绑定器无法实例化模型。
解决:给模型添加公共无参构造函数:public class CheckInventoryQueryModel { // 必须添加公共无参构造函数 public CheckInventoryQueryModel() {} // 你的带参构造函数(如果需要保留) public CheckInventoryQueryModel(string keyword, int status) { Keyword = keyword; Status = status; } // 模型属性 public string Keyword { get; set; } public int Status { get; set; } }原因2:模型的无参构造函数访问权限不足
如果无参构造函数是private或protected修饰的,模型绑定器无法访问它,同样会抛出该异常。
解决:确保无参构造函数的访问修饰符为public。原因3:模型包含嵌套复杂类型
如果CheckInventoryQueryModel中有嵌套的自定义类属性,该嵌套类也需要具备公共无参构造函数,否则模型绑定器在实例化嵌套对象时会报错。
额外说明
控制器的无参构造函数不是本次报错的诱因——如果你的控制器依赖注入框架(如Autofac、Unity)支持带参构造函数的实例化,即使控制器没有无参构造也能正常工作。但模型绑定的逻辑独立于控制器实例化,必须依赖模型的无参构造来创建对象,再填充表单提交的属性值。
内容的提问来源于stack exchange,提问作者user153923
相关产品推荐
相关产品推荐

