如何在 Mvc3 中填充 ListBoxFor?

Posted

技术标签:

【中文标题】如何在 Mvc3 中填充 ListBoxFor?【英文标题】:How to Populate ListBoxFor in Mvc3? 【发布时间】:2012-04-19 05:01:46 【问题描述】:

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

鉴于我已经写了这个

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

但我遇到了错误

当允许多选时,参数“表达式”的计算结果必须为 IEnumerable。

请帮助如何绑定。

【问题讨论】:

请同时发布模型。 listHobby 是什么类型?你是如何给它设定值的?。 【参考方案1】:

试试看

@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; 

所以你的视图模型一定有问题,所以你最好发布你的视图模型进行检查

【讨论】:

是的,我明白了,我返回爱好 id 中的值,它是 int,而我必须返回一个集合。【参考方案2】:

@贾特拉帕蒂·夏尔马,

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

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

在视图中,绑定视图数据,

 <@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

【讨论】:

【参考方案3】:
@Html.ListBoxFor(x => x.HobbyId, Model.listHobby.Select(f => new SelectListItem  Text = f.Hobby, Value = f.pkHobbyId.ToString() ), new  Multiple = "multiple" ) 

表达式中的 HobbyId 必须是可枚举的,因为您设置了多选

【讨论】:

它对我不起作用 // 控制器 public ActionResult AddEditSupplier(int id) clsSupplier _supp = new clsSupplier(); _supp.lstDocImgs = _supp.listDocImages();// 工作正常 _supp.lstDocFiles = _supp.listDocFiles(); // 一切正常 return View(_supp); //查看但在视图中两者都不起作用 @Html.ListBoxFor(x => x.DocumentId, new selectList(Model.lstDocImgs, "documentid", "title")) @Html.ListBoxFor(x => x.DocumentId , Model.lstDocImgs.Select(f => new SelectListItem Text = f.Title, Value = f.documentid.ToString() ), new Multiple = "multiple" )

以上是关于如何在 Mvc3 中填充 ListBoxFor?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ListBoxFor 中删除选定的属性

MVC 3 - 从回发列表框中获取所有选定的值

如何使用 Html.Listboxfor 和 Html.Beginform

将 ListBoxFor 绑定到 MVC 3 中的模型并使用另一个模型自动选择多个项目

MVC3 - 部分视图中的多个 Ajax 表单在刷新时都填充了相同的数据

无法获得 @Html.ListBoxFor() 的正确语法