";没有为这个对象定义无参数构造函数“;提交带有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
是什么导致了这个问题?
不能将<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"},
};
从第一个选择列表创建第二个选择列表是没有意义的。当您绑定到属性时,设置SelectListItem
的Selected
属性没有意义,因为它是决定所选属性的属性值-如果SelectedOpgaveValue
的值是"B",那么无论您给Selected
属性赋予什么值,都将选择第二个选项(Selected
被HtmlHelper简单地忽略)