我的视图中有一个多选列表,可以向控制器发送用户列表。我的视图接收用户,但不发送回控制器。我错过了什么?
我的控制器是:
// GET:
public ActionResult Create(User user)
{
ViewModel model = new ViewModel();
Interaction interact = new Interaction();
model.Users= Repository.GetUsers();
model.Interacao = interact;
return View( model );
}
在我看来,listBox是:
@Html.ListBoxFor( model => model.Users, new MultiSelectList( Model.Users, "Id", "Name" ) )
有谁可以告诉我哪里错了?
答案 0 :(得分:4)
您不应该以{{1}}作为第一个参数绑定,因为它代表一个列表。第一个参数必须是一个字符串/整数数组,它将包含所选的值:
示例:
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
集合属性,因为它不会被保留。