DropDownList无法获取选定的值

时间:2015-11-13 15:32:43

标签: asp.net-mvc

我坚持在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.

我认为问题在于如何在视图中创建下拉列表,我不知道如何设置它,谢谢。

编辑:如果我不从下拉列表中选择任何用户,一切顺利,但如果我选择则会出现错误。

3 个答案:

答案 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" })