最近在我的第一个ASP.Net MVC2 Web应用程序上工作,当我需要在列表框中选择多个值时,我遇到了一些问题.我用一些jQuery解决了这个问题,但是继续编写了一些非常简单的代码来演示.我使用EF作为模型,有两个实体 - Customers和HelpDeskCalls:
控制器:
public ActionResult Edit(int id)
{
Customer currCustomer = ctx.Customers.Include("HelpDeskCalls").Where(c => c.ID == id).FirstOrDefault();
List<HelpDeskCall> currCustCalls = (ctx.HelpDeskCalls.Where(h => h.CustomerID == id)).ToList();
List<SelectListItem> currSelectItems = new List<SelectListItem>();
List<String> selectedValues = new List<string>();
foreach (HelpDeskCall currCall in currCustCalls)
{
bool isSelected = (currCall.ID % 2 == 0) ? true : false;
//Just select the IDs which are even numbers...
currSelectItems.Add(new SelectListItem() { Selected = isSelected, Text = currCall.CallTitle, Value = currCall.ID.ToString() });
//add the selected values …Run Code Online (Sandbox Code Playgroud) 我在视图中有以下代码:
<%= Html.ListBoxFor(c => c.Project.Categories,
new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>
<%= Html.ListBox("MultiSelectList",
new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>
Run Code Online (Sandbox Code Playgroud)
唯一的区别是第一个帮助器是强类型的(ListBoxFor),并且它无法显示所选项(1,2),即使项目出现在列表中,等等.更简单的ListBox正在按预期工作.
我显然在这里遗漏了一些东西.我可以使用第二种方法,但这真的让我烦恼,我想弄清楚.
作为参考,我的模型是:
public class ProjectEditModel
{
public Project Project { get; set; }
public IEnumerable<Project> Projects { get; set; }
public IEnumerable<Client> Clients { get; set; }
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<Tag> Tags { get; set; }
public ProjectSlide SelectedSlide { get; set; }
}
Run Code Online (Sandbox Code Playgroud)