2011-04-18 33 views
1

我有一个多选择列表在我的视图发送给控制器的用户列表。我的视图接收用户,但不发送回控制器。我错过了什么?MultiSelectList不返回查看数据

我的控制器:

 // 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")) 

谁能告诉我在哪里,我错了吗?

回答

4

作为第一个参数,您不应该将其绑定为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; } 
} 

然后:

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

这将成功地结合:

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

或者:

[HttpPost] 
public ActionResult Index(MyViewModel model) { ... } 

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