奇怪的错误:没有为这个对象定义无参数构造函数

本文关键字:对象 定义 构造函数 参数 错误 | 更新日期: 2023-09-27 17:53:30

我知道这个问题已经被问过很多次了,但是我不能解决我的问题,这很有趣。

我的模型很简单:

public class RegisterModel
    {
        [Display(Name = "First name")]
        [Required]
        public string FirstName { get; set; }
        [Display(Name = "Last name")]
        [Required]
        public string LastName { get; set; }
        [Display(Name = "Email address")]
        [RegularExpression(@"^([a-zA-Z0-9_'-'.]+)@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.)|(([a-zA-Z0-9'-]+'.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(']?)$", ErrorMessage = "Enter valid e-mail")]
        [Required(ErrorMessage = "E-mail is empty")]
        public string EmailAddress { get; set; }
        public System.Web.Mvc.SelectList Countries { get; set; }
    }

行动:

[AllowAnonymous]
        public virtual ActionResult Register(RegisterModel data)
        {
            if (!HttpContext.User.Identity.IsAuthenticated)
            {
                ModelState.Clear();
                var countries =
                    this.ClientRepositoryBuilder
                        .CountryClientRepository
                        .GetAllCountries();
                data.Countries = new SelectList(countries, "Id", "CountryName");
                return
                    this.View(data);
            }
            else
            {
                return
                    this.RedirectToAction(MVC.Home.Index());
            }
        }

一旦我添加国家到我的模型,东西停止工作,它不调用POST动作,给我一个错误与firebug(这是ajax POST):

没有为这个对象定义无参数构造函数

奇怪的错误:没有为这个对象定义无参数构造函数

当试图将来自请求的信息转换为RegisterModel时,默认模型绑定无法处理该对象。

选项:

  • 将"传入请求模型"与"视图模型"分开(因为看起来你总是在控制器中设置该属性)。
  • 创建自定义模型绑定-查看更多MSDN: ASP的特点和缺点。何时使用IModelBinder和DefaultModelBinder。

如果你想要接受列表作为请求参数-模型绑定到列表MVC 4可能有一个答案。

好吧,我在字体上犯了一个错误,我甚至不知道我是怎么犯这个错误的。所以我更新了模型,适合国家和东西的类型,现在工作了:

[Required]
public int Countries { get; set; }

这是一个错误,由于我的疲劳;)