Asp.net mvc 在MVC4视图中链接多个类
假设我有一个这样的模型(从原始模型简化): 在PickList Create视图的LineOfPickList中,通常要做的事情是创建一个dropdownlist,列出所有项目描述,并在单击Create时将所选项目放入新创建的LineOnPickList记录中 但是,我需要做的是显示位置binnumber的下拉列表,但在新创建的LineOnPickList记录中仍有与该位置关联的项Asp.net mvc 在MVC4视图中链接多个类,asp.net-mvc,ef-code-first,Asp.net Mvc,Ef Code First,假设我有一个这样的模型(从原始模型简化): 在PickList Create视图的LineOfPickList中,通常要做的事情是创建一个dropdownlist,列出所有项目描述,并在单击Create时将所选项目放入新创建的LineOnPickList记录中 但是,我需要做的是显示位置binnumber的下拉列表,但在新创建的LineOnPickList记录中仍有与该位置关联的项 如何做到这一点?为下拉列表定义视图模型 public class ItemViewModel { publ
如何做到这一点?为下拉列表定义视图模型
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);
}
那么控制器中的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);
}
项目
与位置
的关系如何?Oops。。。我错误地定义了Item类。现在更正…很抱歉,我不知道如何访问控制器内部的model
。请告诉我是如何做到的。我的视图中一定缺少一个引用,它不认为CreateLineOnPickListViewModel是@model的有效选择,除非我将类CreateLineOnPickListViewModel
的定义放在我的模型文件中。在视图中,我将公共操作结果创建(…
?@davecove将CreateLineOnPickListViewModel
类放置在Models
文件夹中。在视图中定义@model
时,请提供带有名称空间的类名。公共操作结果创建(
部件应放入控制器中。对此表示抱歉。好的,我替换了现有的[HttpPost]ActionResult Create
使用此项,当我的BinNumber显示在我视图的DropDownList中时,我可以选择一个,并建模。返回到ActionResult Create
的项目中有一个元素,该元素始终为空。这就好像我的DropDownList选择的详细信息没有包含在回发邮件中一样ActionResult Create
@davecove Yes。这些值将不会回发。所选选项值将填充到ItemID
属性中。
@model CreateLineOnPickListViewModel
@Html.DropDownListFor(m => m.ItemId, new SelectList(Model.Items, "ID", "BinNumber"), "-")
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);
}