具有多个选择的MVC模型绑定列表框

时间:2008-12-20 01:39:58

标签: asp.net-mvc model-view-controller

如何将ListBox选择提交给ModelBinder?

<%=Html.Hidden("response.Index",index)%>
<%=Html.ListBox("response[index].ChoiceID",
                new MultiSelectList(gc.choice,"ChoiceID","ChoiceText") )%>

'gc.choice'是一个列表

我可以将fisrt选择的值添加到模型中,但不是第二个选择可能是因为我无法更改索引。

2 个答案:

答案 0 :(得分:3)

我以稍微不同的方式解决了这个问题......

[Model]
public IEnumerable<string> SelectedStores { get; set; }

[View]
<%= Html.ListBox("SelectedStores", 
    (MultiSelectList)ViewData["Stores"], 
    new { size = "8" }) %>

[Controller]
ViewData["Stores"] = 
    new MultiSelectList(StoreItems, "Value", "Text", model.SelectedStores);

因此模型有一个IEnumberable,将填充用户选择。视图显示带有MultiSelectList的ListBox,并且控制器在构造MultiSelectList时从模型传入SelectedStores。

答案 1 :(得分:1)

我构建了一个具有MultiSelect成员SamplePresentationModel的演示模型userList类。 然后假设IEnumerable<User> allUser是选项列表。 我用

  View(new SamplePresentationModel(){ userList = new MultiSelectList(allUsers, 
    "UserId", 
    "UserName", 
    allUsers.Select(user => user.UserID))});

将MultiSelection传递给视图。

然后在视图中我可以构建列表框

   <label for="userList">users:</label>
    <%= Html.ListBox("usersList", Model.userList)%>

在POST动作中,我可以捕捉选择:

IEnumerable<int> selectedUserIDs = Request["usersList"].Split(new Char[] { ',' }).Select(idStr => int.Parse(idStr));

不知道这是否有帮助!