Asp.net mvc 3 MultiSelectList不返回视图数据

Asp.net mvc 3 MultiSelectList不返回视图数据,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我的视图中有一个多选列表,用于向控制器发送用户列表。我的视图接收用户,但不发送回控制器。我错过了什么 我的控制器是: // GET: public ActionResult Create(User user) { ViewModel model = new ViewModel(); Interaction interact = new Interaction(); model.Users= Repository.

我的视图中有一个多选列表,用于向控制器发送用户列表。我的视图接收用户,但不发送回控制器。我错过了什么

我的控制器是:

        // GET:
    public ActionResult Create(User user)
    {
        ViewModel model = new ViewModel();

        Interaction interact = new Interaction();

        model.Users= Repository.GetUsers();
        model.Interacao = interact;

        return View( model );
    }
在我看来,列表框是:

@Html.ListBoxFor( model => model.Users, new MultiSelectList( Model.Users, "Id", "Name" ) )

有人能告诉我哪里错了吗?

您不应该绑定model.Users作为第一个参数,因为这表示一个列表。第一个参数需要是一个字符串/整数数组,该数组将包含选定的值:

例如:

public class MyViewModel
{
    pubilc string[] SelectedUserIds { get; set; }
    public IEnumerable<UserViewModel> Users { get; set; }
}

public class UserViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
}
它将成功绑定到:

[HttpPost]
public ActionResult Index(string[] selectedUserIds) { ... }
或:


当然,在第二种情况下,您只能填充SelectedUserID属性,因为这是从视图发送的唯一内容。例如,如果由于模型错误需要重新显示同一视图,则需要重新填充vie模型的Users集合属性,因为它不会被持久化。

您不应该将model.Users作为第一个参数绑定,因为这表示一个列表。第一个参数需要是一个字符串/整数数组,该数组将包含选定的值:

例如:

public class MyViewModel
{
    pubilc string[] SelectedUserIds { get; set; }
    public IEnumerable<UserViewModel> Users { get; set; }
}

public class UserViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
}
它将成功绑定到:

[HttpPost]
public ActionResult Index(string[] selectedUserIds) { ... }
或:

当然,在第二种情况下,您只能填充SelectedUserID属性,因为这是从视图发送的唯一内容。例如,如果由于模型错误需要重新显示同一视图,则需要重新填充vie模型的Users集合属性,因为它不会被持久化