带集合的模型 – Html.ListBoxFor不设置所选项

这个让我发疯,在我失去理智之前,请帮忙。

问题摘要:我的模型“Thread”有“ForumMessage”集合,每个ForumMessage都有一个Multi select下拉列表。 我想要做的就是根据来自数据库的值设置所选值。 我已经通过很multithreading,但无法找到解决方案。

如果您知道任何此类问题,请告诉我,我会通过他们。

以下是我的模特

public class Thread { public List Messages { get; set; } //Master list coming from DB public List AllClassifications { get; set; } public string Subject { get; set; } public int[] ThreadSelectedClassifications { get; set; } } public class ForumMessage { public string MessageName { get; set; } public int[] SelectedClassifications { get; set; } } public class Classifications { public int ID { get; set; } public string Title { get; set; } public string Description { get; set; } } 

下面是我的控制器

 public ActionResult Index() { var thread = new Thread(); thread.Messages = new List(); thread.AllClassifications = new List() { new Classifications { ID = 1, Title = "One" , Description = "One" }, new Classifications { ID = 2, Title = "Two" , Description = "Two" }, new Classifications { ID = 3, Title = "Three" , Description = "Three" }, new Classifications { ID = 4, Title = "Four" , Description = "Four" }, new Classifications { ID = 5, Title = "Five" , Description = "Five" } }; thread.ThreadSelectedClassifications = new int[] { 2, 4 }; for (int i = 0; i < 5; i++) { var post = new ForumMessage(); post.SelectedClassifications = new int[] { 2, 4 }; post.MessageName = i.ToString(); thread.Messages.Add(post); } return View(thread); 

以下是我的看法

 @model MultiSelectDemo.Controllers.Thread @foreach (var item in Model.Messages) { 
@*@Doesn't set the items selected *@ @Html.ListBoxFor(m => item.SelectedClassifications, new SelectList(Model.AllClassifications, "ID", "Title"));
@* Doesn't set the items selected *@ @Html.ListBoxFor(m => item.SelectedClassifications, new SelectList(Model.AllClassifications, "ID", "Title", item.SelectedClassifications));
@* Doesn't set the items selected *@ @Html.DropDownListFor(m => item.SelectedClassifications, new SelectList(Model.AllClassifications, "ID", "Title", item.SelectedClassifications), new { @multiple = "multiple" })
}
This works. @Html.ListBoxFor(m => m.ThreadSelectedClassifications, new MultiSelectList(Model.AllClassifications, "ID", "Title"))

样本输出 }

SelectList仅支持单个选定值,因此在您的代码示例中,您告诉它将所选值设置为具有所选值的整个列表值的选项。 由于不存在此选项,因此未选择任何内容。

另一方面, MultiSelectList允许传递可枚举的选定值。 如果你使用正确的课程,你会没事的。

 @Html.ListBoxFor(m => item.SelectedClassifications, new MultiSelectList(Model.AllClassifications, "ID", "Title", item.SelectedClassifications))