带集合的模型 – 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))