You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:10:31