我坚持在ASP.NET MVC中创建下拉列表。 视图模型:
public MultiSelectList users { get; set; }
我在控制器中设置了值:
var allUsers = db.Users.Select(u => new {
id = u.UserId,
name = u.Name
}).ToList();
model.users = new MultiSelectList(allUsers, "id", "name");
因此设置了选择框值。 在视图中:
@Html.DropDownListFor(m => m.users, Model.users, new { @class = "form-control" })
问题是,如果我选择该值并单击“提交”,则会收到此错误:
No parameterless constructor defined for this object.
我认为问题在于如何在视图中创建下拉列表,我不知道如何设置它,谢谢。
编辑:如果我不从下拉列表中选择任何用户,一切顺利,但如果我选择则会出现错误。
答案 0 :(得分:2)
您正试图发布到MultiSelectList
媒体资源。这不会起作用,但具体的错误与MultiSelectList
没有无参数构造函数的事实有关,并且模型绑定器无法用参数创建一个类。模型绑定过程中涉及的任何内容必须具有无参数构造函数。
你应该做的是有一个额外的属性,如:
public List<int> SelectedUserIds { get; set; }
然后,绑定到您视图中的那个:
@Html.ListBoxFor(m => m.SelectedUserIds, Model.Users)
另外,正如您所注意到的,我将DropDownListFor
更改为ListBoxFor
。如果您想要选择多个,则需要ListBoxFor
。
答案 1 :(得分:0)
尝试绑定时看起来失败了,所以要防止它绑定:
[HttpPost]
public ActionResult YourMethod([Binding(Exclude = "users")] SomeViewModel model)
回帖应该转到IEnumerable以捕获所选项目。
添加到视图模型
public IEnumerable UserList { get; set; }
将视图更改为
@Html.DropDownListFor(m => m.UserList, Model.users, new { @class = "form-control" })
答案 2 :(得分:0)
如果您想从下拉列表中获取所选用户ID,则必须向模型中添加属性
public MultiSelectList users { get; set; }
public int SelectedUser { get;set;}
在视野中
@Html.DropDownListFor(m => m.SelectedUser, Model.users, new { @class = "form-control" })