我在 POST 表单时遇到上述错误,我认为错误的根本原因是“DropDownListFor”,其中复数 SelectList 被调用两次,如果是,请提出解决方案?
如果我从“x=>x.Values”更改为“x=>x.Name”,则会收到错误“不存在具有键“DDLView.Name”的“IEnumerable”类型的 ViewData 项。”
编辑器模板
@model DropDownListViewModel
@Html.LabelFor(x=>x.Values, Model.Label)
@Html.DropDownListFor(x=>x.Values, Model.Values)
查看模型
public class HomePageViewModel
{
public DropDownListViewModel DDLView { get; set; }
}
public class DropDownListViewModel
{
public string Label { get; set; }
public string Name { get; set; }
public SelectList Values { get; set; }
}
Controller
public ActionResult Index()
{
HomePageViewModel homePageViewModel = new HomePageViewModel();
homePageViewModel.DDLView = new DropDownListViewModel
{
Label = "drop label1",
Name = "DropDown1",
Values = new SelectList(
new[]
{
new {Value = "1", Text = "text 1"},
new {Value = "2", Text = "text 2"},
new {Value = "3", Text = "text 3"},
}, "Value", "Text", "2"
)
};
}
[HttpPost]
public ActionResult Index(HomePageViewModel model)
{
return View(model);
}
查看
@model Dynamic.ViewModels.HomePageViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x=>x.DDLView)
<input type="submit" value="OK" />
}
最佳答案
问题是 SelectList 没有无参数构造函数,并且模型绑定(bind)器无法实例化它,但您正尝试将其发回。
要解决您的问题,请在实现中更改两件事:
1) 更改编辑器模板
@Html.DropDownListFor(x=>x.Values, Model.Values)
至
@Html.DropDownListFor(x=>x.ValueId, Model.Values)
2) 添加到原始 DropDownListViewModel
[ScaffoldColumn(false)]
public string ValueId { get; set; }
现在您的操作后参数将填充正确的值。
关于asp.net-mvc - 没有为此对象定义无参数构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11439212/