【问题标题】:How can I initialize one model in another model's controller action?如何在另一个模型的控制器操作中初始化一个模型?
【发布时间】:2023-03-09 08:30:02
【问题描述】:

我在 Asp.net MVC 中创建了一个网络应用程序,它有一个订单操作。我有这两个订单模型

 public class Order
    {
        public int Id { get; set; }
        public DateTimeOffset OrderTime { get; set; }
        [InverseProperty("Order")]
        public ICollection<OrderDetail> OrderDetails { get; set; }
    }

对于订单详情

public class OrderDetail
    {
        public int Id { get; set; }
        public int OrderId { get; set; }
        public ICollection<Order> Order { get; set; }
        public int MenuId { get; set; }
        public int RestaurantId { get; set; }
        public Menu Menu { get; set; }
        public decimal Price { get; set; }
        public int Quantity { get; set; }
    }

我为他们创建了表格。 我还为 Order 创建了一个控制器。它包含索引和详细信息操作。索引操作显示订单列表,每个订单都有自己的详细信息链接,其中应包含订单信息和相关的订单详细信息

public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Order order = db.Orders.Find(id);
            if (order == null)
            {
                return HttpNotFound();
            }
            return View(order);
        }

问题是 OrderDetails 为空。你能建议我如何在 Details 操作中初始化 OrderDetail 吗?

【问题讨论】:

  • @Sir Rufo 我应该编辑详细信息操作方法吗?
  • @Sir Rufo 我调试了这个方法,它告诉我 OrderDetail 是空的
  • @Sir Rufo 如何在此方法中初始化 OrderDetails?
  • @Sir Rufo 你能帮忙解决这个问题吗?

标签: asp.net asp.net-mvc model-view-controller view


【解决方案1】:

您必须告诉 EntityFramework 您要包含哪些导航属性。

Order order = db.Orders
    .Where( o => o.Id == id )
    .Include( o => o.OrderDetails )
    .SingleOrDefault();

但是你不能再使用 Find 方法了

【讨论】:

  • 不幸的是,它没有帮助显示项目,但在行动中 OrderDetails 值更改为“Count = 0”
  • 那么没有存储该订单的详细信息
  • 但请记住:您的问题是 OrderDetails 属性为何为空。如果您还有其他问题,请随时提出其他问题。
  • 不,里面有真实数据。我也看到其他订单的详细信息,它是一样的。它什么也不显示
  • 但是 Count=0 是什么意思?
猜你喜欢
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2016-08-30
相关资源
最近更新 更多