MVC Master-Detail 增删改查

MVC Master-Detail CRUD

我是从 MVC 开始的,我有一些基本问题,也许你可以给我一些指导: 我将 MVC5 与 Razor 和 EntityFramework 6 一起使用。这里没有 AngularJS 技能。 我有一个 classic Master-Detail CRUD,我需要在其中创建 Order 和 OrderItems。我的想法是,当您创建订单时,您可以以相同的形式添加项目,然后使用一个“保存”按钮在数据库中创建两条记录(订单和项目)。

我用脚手架创建了 "Orders" CRUD,效果非常好,而且效果很好。但现在我需要将这些项目添加到相同的 VIEW 中,这就是我迷路的地方并尝试不同的方法来做到这一点:

  1. 绑定问题:我想也许我可以将 OrderItems 列表添加到 CREATE 事件的绑定 header 中。我的 OrderController 有这个方法: public ActionResult Create([Bind(Include = "Id,Date,*other fields*")] Order order) 并且它适用于 ORDER CRUD 操作。但是,现在,如果需要将一个列表添加到 header 上绑定的字段列表中,这可能吗?那我应该如何将数据保存在视图中呢?
  2. JSON:我想的另一种方法是删除绑定 header 并使用 Json,但我的所有示例我已经看到正在使用 AngularJS 并且除了这个 CRUD 之外我已经完成了所有站点,我更愿意让那个选项作为真正的最后机会。另一方面,我发现了这个:https://www.youtube.com/watch?v=ir9cMbNQP4w 这正是我需要做的,但是:它在 MVC4 而不是 MVC5 上,而且我的模型中有我所有的实体验证(扩展)class 以及控制器中的一些(仅与创建或编辑订单相关的)。如果我在这里错了请告诉我!
  3. 局部视图:我刚刚尝试的最后一种方法是局部视图。我已经根据本教程成功创建了初始数据加载:http://dotnetmentors.com/mvc/render-partialview-with-model.aspx,但在那之后,我需要向我的订单添加新项目,或者 edit/delete 现有项目,这就是我迷路的地方: 我应该对部分视图使用不同的 CREATE/EDIT 方法吗?那我怎么发送数据呢?我如何只使用一个保存按钮同时保存所有内容?

当我寻找更多信息时,我越来越迷路了....所以,我在这里向你们寻求帮助!

提前致谢!

创建自定义视图模型:

public class NewOrderViewModel
{
    public Order order { get; set; }
    public OrderItem[] orderItems { get; set; }
}

然后您可以通过更改顶部的 @model NewOrderViewModel 在视图中使用它,您将能够像这样使用:

@Html.TextBoxFor(m => m.order.Phone);
@Html.TextBoxFor(m => m.orderItems[0].ItemName);

您将需要一些 javascript 来复制 html 并为用户要添加的每个新订单项创建新的表单元素。

那么您的控制器签名将如下所示:

public ActionResult Create(NewOrderViewModel content)