Html.BeginCollectionItem列表未加载

时间:2019-01-25 02:40:28

标签: c# begincollectionitem

我有一个HTML.BeginCollectionItem表单,该表单可以正常工作。但是,我也希望用户只能显示/编辑列表中的一个元素。我的计划是使用一个OrderId(其中包含OrderDetail元素列表)或仅一个OrderDetailId链接到Build视图。然后相应地加载模型。

如果我在查询字符串中输入有效的OrderDetailId而不是OrderId,则会正确加载页面(用于编辑/查看,而不是创建页面)。用于创建的页面永不加载。

这是我的控制器代码:

 public PartialViewResult BuildOne(OrderDetailViewModel model)
        {
            model.StateList = states;
            model.CatalogItems = db.CatalogItems.ToList();           
            return PartialView("_BuildOne", model);
        }

        [HttpGet]
        public ActionResult Build(BuildViewModel model, int? OrderDetailId, string OrderId)
        {
            model.Od = new List<OrderDetailViewModel>();
            if (OrderDetailId != null)
            {

                OrderDetail model2 = db.OrderDetail.Where(a => a.Id == OrderDetailId).First();
                model.Od.Add(new OrderDetailViewModel() {
                    OrderId = model2.OrderId,
                    Message = model2.Message,
                    CatalogItems = db.CatalogItems.ToList(),
                    StateList = states });
            }
            else
            {
                if(OrderId != null)
                {
                    model.Od.Add(new OrderDetailViewModel() { OrderId = OrderId, CatalogItems = db.CatalogItems.ToList(), StateList = states });
                }
                else
                {
                    model.Od.Add(new OrderDetailViewModel() { CatalogItems = db.CatalogItems.ToList(), StateList = states });
                }

            }
            return View(model);
        }



        [HttpPost]
        public ActionResult Build(BuildViewModel model)
        {
            if (model.OrderId == null)
            {
                Orders order = new Orders();
                order.OrderId = Guid.NewGuid().ToString();
                model.OrderId = order.OrderId;
                db.Orders.Add(order);
                db.SaveChanges();
            }

            foreach(var m in model.Od)
            {
                OrderDetail od = new OrderDetail();
                od.Status = "Pending Checkout";
                od.OrderId = model.OrderId;
                od.Message = m.Message;
                db.OrderDetail.Add(od);
                db.SaveChanges();
            }

            ViewBag.Data = "Box added successfully!";
            if(User.Identity.IsAuthenticated)
            {
                Orders Order = db.Orders.Where(x => x.OrderId == model.OrderId).First();
                Order.UserId = User.Identity.GetUserId();
                db.SaveChanges();
                return RedirectToAction("Checkout1", "Home", new { model.OrderId });
            }
            else
            {
                return RedirectToAction("Register", "Account", new { model.OrderId });
            } 
        }

由于某种原因,在[HttpPost]方法上,foreach(var m in model.Od)始终为null。

0 个答案:

没有答案