Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC4视图中链接多个类_Asp.net Mvc_Ef Code First - Fatal编程技术网

Asp.net mvc 在MVC4视图中链接多个类

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

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

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

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


如何做到这一点?

为下拉列表定义视图模型

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);
}