M-V-C:如何在编辑模式下获取或指示列表框中的选定项?

M-V-C: How to get or indicate Selected Items in List box in the Edit Mode?

我正在创建多 Select 列表框。我能够成功地将项目从模型渲染到列表框。以下是我的代码:

属性

public IEnumerable<SelectListItem> carTypes { get; set; }
public IEnumerable<string> selectedCarTypes { get; set; }

创建操作

public ActionResult Create()
{
     List<SelectListItem> selectListItem = new List<SelectListItem>();

     foreach(CarType type in db.CarTypes)
        {
            SelectListItem item = new SelectListItem()
            {
                Text = type.Name,
                Value = type.Id.ToString()
            };
            selectListItem.Add(item);
        }

        Assigning assign = new Assigning ();
        assign.carTypes = selectListItem;
        return View(assign);
}

查看

@Html.ListBoxFor(model=>model.selectedCarTypes,Model.carTypes)

问题出在编辑操作上。我一直在尝试突出显示 Edit View 中针对特定 AssignId 编辑的所有列表框,例如在列表框中有三个项目:现代、丰田和宝马,我 select 宝马和丰田和创建分配。现在,当我返回编辑视图时,它应该突出显示 BMW 和 Toyota。

我参考了 here,但对我不起作用。这个问题有解决办法吗?

修改:这是我的Edit Action

public ActionResult Edit(int? id)
{
     if (id == null)
     {
         return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
     }
     Assigning assign = db.Assigning.Find(id);
     if (assign == null)
     {
         return HttpNotFound();
     }
     return View(assign);
}

您可以将其作为采用选定值的 SelectList 传递

public SelectList( IEnumerable items, object selectedValue)

你的情况

@Html.DropDownListFor(n => n.selectedCarTypes, 
                     new SelectList(Model.carTypes, Model.SelectedCarTypes)) 

编辑时您没有设置模型:

  1. Model.carTypes 应该是所有车型的 List<SelectListItem>

  2. Model.selectedTypes 应该是所有选定值的 List<string>