3

假设我有一个这样的模型(从原始模型简化):

public class Location
{
    public int ID { get; set; }
    public string BinNumber { get; set; }
}

public class Item
{
    public int ID { get; set; }
    public string Description { get; set; }
    public virtual Location Bin { get; set; }
}

public class LineOnPickList
{
    public int ID { get; set; }
    public virtual Item Item { get; set; }
}

在 LineOfPickList Create 视图中通常要做的事情是有一个下拉列表,列出所有项目描述,并在单击 Create 时将所选项目放入新创建的 LineOnPickList 记录中。

然而,我需要做的是显示位置 BinNumbers 的下拉列表,但在新创建的 LineOnPickList 记录中仍然有与该位置关联的项目。

那怎么做?

4

1 回答 1

2

为您的下拉菜单定义视图模型

public class ItemViewModel
{
    public int ID { get; set; }
    public string BinNumber { get; set; }
}

然后在您的控制器操作中构建下拉列表数据,如下所示

public class CreateLineOnPickListViewModel
{
    public int ItemId { get; set; }
    public IEnumerable<ItemViewModel> Items { get; set; }
}

public ActionResult Create()
{
    var model = new CreateLineOnPickListViewModel();
    model.Items = db.Items
          .Select(i => new ItemViewModel { ID = i.ID, BinNumber = i.Bin.BinNumber });

    return View(model);
}

那么在你看来

@model CreateLineOnPickListViewModel

@Html.DropDownListFor(m => m.ItemId, new SelectList(Model.Items, "ID", "BinNumber"), "-")

然后你的控制器中的 post action 方法看起来像这样

public ActionResult Create(CreateLineOnPickListViewModel model)
{
    var item = new Item { ID = model.ItemID };
    db.Items.Attach(item);

    var lineOnPickList = new LineOnPickList { Item = item };

    db.SaveChanges();

    return View(model);
}
于 2012-09-02T02:26:45.467 回答