";没有为这个对象定义无参数构造函数“;提交带有DropDownList的表单时出错

本文关键字:提交 DropDownList 表单 出错 构造函数 quot 定义 对象 参数 | 更新日期: 2023-09-27 18:25:12

当我点击下面例子中的提交按钮时,我会收到一条错误消息,如下所示:

没有为此对象定义无参数构造函数。

收到错误消息后,我无法继续使用该应用程序。我试着调试,但没有得到任何有用的信息来帮助解决这个问题。

控制器:

[MvcApplication.SessionExpire]
    [HttpGet]
    public ActionResult Index()
    {
        DataLinqDB db = new DataLinqDB();
        OpgaverPage model = new OpgaverPage();
        var random = new Random();
        var antalopgaver = db.opgavers.Count();
        var number = random.Next(antalopgaver);
        List<opgaver> List = db.opgavers.Skip(number).Take(1).ToList();
        var A = db.opgavers.Skip(number).Take(1).FirstOrDefault();
        model.Overskift = A.overskift;
        model.OpgaveValueList = new SelectList(
                                new List<SelectListItem>
                                {
                                    new SelectListItem { Selected = true, Text = A.svar1, Value = "A"},
                                    new SelectListItem { Selected = false, Text = A.svar2, Value = "B"},
                                    new SelectListItem { Selected = false, Text = A.svar3, Value = "C"},
                                }, "Value", "Text", 1);
        //angiver id til opgaven
        model.HiddenId = A.Id;
        //Fremvis hvornår man har fået point
        //List<pointantal> PointValue = db.pointantals.Where(x => x.omrade == o && x.brugerid == brugerId).OrderByDescending(i => i.Id).Take(20).ToList();
        //model.ListPoint = PointValue.ToList();
        return View(model);
    }
    //error her
    [MvcApplication.SessionExpire]
    [HttpPost]
    public ActionResult index(OpgaverPage opgavervalue)
    {
        if (ModelState.IsValid)
        {
            DataLinqDB db = new DataLinqDB();
            var opgaver = db.opgavers.FirstOrDefault(i => i.Id == opgavervalue.HiddenId);
            if (opgaver != null)
            {
                if (new SelectList(opgavervalue.OpgaveValueList).SelectedValue.ToString() == "A" 
                    || new SelectList(opgavervalue.OpgaveValueList).SelectedValue.ToString() == "B" 
                    || new SelectList(opgavervalue.OpgaveValueList).SelectedValue.ToString() == "C")
                {
                    Value();
                }
                else
                {
                    //error
                    ModelState.AddModelError("", "Desværre dit svar forkert");
                }
            }
            else
            {
                return RedirectToAction("index", opgavervalue);
            }
        }
        return View();
    }

型号:

public class OpgaverPage
{
    public string Overskift
    {
        get; set;
    }
    public int HiddenId
    {
        get; set;
    }
    [Display(Name ="Spørgsmål")]
    public string Svar
    {
        get; set;
    }
    public SelectList OpgaveValueList
    {
        get; set;
    }
    public List<opgaver> ListPoint
    {
        get; set;
    }
}

视图:

@using (Html.BeginForm("index", "spil"))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    @Html.HiddenFor(i => i.HiddenId)
    <div class="form-group">
        @Html.LabelFor(x => x.Svar)<br />
        @Html.DropDownListFor(x => x.OpgaveValueList, Model.OpgaveValueList, new
   {
       @class = "form-control"
   })
    </div>

    <button type="submit" class="btn btn-effect-ripple btn-success"><i class="fa fa-check"></i> Tjek mit svar</button>
}

我试图遵循这里的答案,但我无法解决问题:ASP.NET MVC下拉列表From SelectList

是什么导致了这个问题?

";没有为这个对象定义无参数构造函数“;提交带有DropDownList的表单时出错

不能将<select>绑定到SelectList<select>元素返回一个值。表示,您的模型需要绑定一个属性

public string SelectedOpgaveValue { get; set; }

然后在视图中

 @Html.DropDownListFor(x => x.SelectedOpgaveValue, Model.OpgaveValueList, new { @class = "form-control" })

出现错误的原因是您试图绑定到SelectList类型的属性,该属性没有无参数构造函数。

此外,您应该将生成选择列表的代码修改为

public IEnumerable<SelectListItem> OpgaveValueList { get; set; }
model.OpgaveValueList = new List<SelectListItem>
{
    new SelectListItem { Text = A.svar1, Value = "A"},
    new SelectListItem { Text = A.svar2, Value = "B"},
    new SelectListItem { Text = A.svar3, Value = "C"},
};

从第一个选择列表创建第二个选择列表是没有意义的。当您绑定到属性时,设置SelectListItemSelected属性没有意义,因为它是决定所选属性的属性值-如果SelectedOpgaveValue的值是"B",那么无论您给Selected属性赋予什么值,都将选择第二个选项(Selected被HtmlHelper简单地忽略)