MVC Master-Detail CRUD

时间:2016-02-03 12:43:09

标签: c# asp.net-mvc entity-framework crud

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

我用脚手架创建了“Orders”CRUD非常好,它完美无缺。但是现在我需要添加相同的VIEW项目,这就是我迷失方向并尝试不同的方法来做到这一点:

  1. BINDING ISSUE :我想我可能会将OrderItems列表添加到CREATE事件的绑定标头中。我的OrderController有这个方法: public ActionResult Create([Bind(Include = "Id,Date,*other fields*")] Order order),它可以与ORDER CRUD操作一起使用。但是,现在,如果需要将List添加到该标题上绑定的字段列表中,这可能吗?我应该如何在View中保存数据呢?
  2. JSON :我想的另一种方法是删除Binding标头并使用Json,但我见过的所有示例都使用AngularJS并且除了这个CRUD之外我已经完成了所有网站,我愿意让这个选择真正的最后机会。另一方面,我发现了这个:https://www.youtube.com/watch?v=ir9cMbNQP4w,这正是我需要做的,但是:它在MVC4而不是MVC5上,而且我的模型(扩展)类中的所有实体验证都是其中一些也在控制器中(仅与创建或编辑订单相关的那些)。请告诉我,如果我错了!
  3. PARTIAL VIEW :我刚试过的最后一种方式是使用Partial View。我已根据本教程成功创建了初始数据加载:http://dotnetmentors.com/mvc/render-partialview-with-model.aspx,但之后,我需要在订单中添加新项目,或编辑/删除现有项目,这里是我迷路的地方:应该我对部分视图有不同的CREATE / EDIT方法?我如何发送数据呢?我怎么只能使用一个SAVE按钮同时保存所有内容?
  4. 当我寻找更多信息时,我越来越迷失了......所以,我在这里向你们寻求帮助!

    提前多多感谢!!

1 个答案:

答案 0 :(得分:1)

创建自定义视图模型:

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并为用户想要添加的每个新orderItem创建新的表单元素。

然后您的控制器签名将如下所示:

public ActionResult Create(NewOrderViewModel content)