MultiSelectList不返回视图数据

时间:2011-04-18 14:05:54

标签: asp.net-mvc-3 razor

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

我的控制器是:

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

有谁可以告诉我哪里错了?

1 个答案:

答案 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集合属性,因为它不会被保留。