如何在Mvc3中填充ListBoxFor?

时间:2012-04-05 12:46:38

标签: asp.net-mvc-3 html.listboxfor

我有一个类型存储过程列表,其中包含ID和Name作为数据。 我在模型中具有int类型的属性和相同存储过程的列表。 现在我想将这些信息绑定到ListBoxFor

在视图中我写了这个

@Html.ListBoxFor(x => x.HobbyId, new MultiSelectList(Model.listHobby, "pkHobbyId", "Hobby"))

但是我收到了错误

  

当允许多个选择时,参数'expression'必须求值为IEnumerable。

请帮助绑定。

3 个答案:

答案 0 :(得分:7)

试试

@Html.ListBoxFor(x => x.HobbyId, Model.listHobby.Select(f => new SelectListItem { Text = f.Hobby, Value = f.pkHobbyId.ToString() }), new { Multiple = "multiple" }) 

listHobby是我样本上的iEnumerable列表


抱歉,如果我误导你,赶紧回答,但是你无法将多选列表框的结果变成guid或int变量(无论你的HoobyId是什么类型),你应该有一个数组来获取结果,如

public string[] SelectedHobbyIds { get; set; }

因此,您的视图模型一定有问题,因此您发布要检查的视图模型的效果会更好

答案 1 :(得分:5)

@ Chhatrapati Sharma,

在您的控制器中,试试这个,

ViewData['anyName'] = new SelectList {
 Text = ,  // text from ur function
 Value = , // Value from function
 Selected = // if required
}

并在视图中绑定viewdata,如

 <@Html.ListBox("docImages", ((IEnumerable<SelectListItem>)ViewData["anyName"]))

如需测试,请尝试以下示例选择列表项目,

ViewData['anyName'] = new List<SelectListItem>{ 
                new SelectListItem {Text = "First", Value = "0"}, 
                new SelectListItem {Text = "Second"), Value = "1"}, 
                new SelectListItem {Text = "Third", Value = "2"} 
                    };

如果此示例有效,请检查您的函数“_supp.listDocImages()”并确保它返回IList

答案 2 :(得分:3)

@Html.ListBoxFor(x => x.HobbyId, Model.listHobby.Select(f => new SelectListItem { Text = f.Hobby, Value = f.pkHobbyId.ToString() }), new { Multiple = "multiple" }) 

表达式中的HobbyId必须是可数字的,因为你设置了多选