Html.BeginCollectionItem Список не загружается - PullRequest
0 голосов
/ 25 января 2019

У меня есть форма HTML.BeginCollectionItem, которая работает правильно.Однако я также хотел бы, чтобы пользователи могли отображать / редактировать только один элемент из списка.Мой план состоит в том, чтобы связать с представлением Build EITHER OrderId (который содержит список элементов OrderDetail) или просто OrderDetailId, а затем загрузить модель соответствующим образом.

Страница (для редактирования / просмотра, а не для создания) корректно загружается, если в строку запроса введен действительный 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) всегда равно нулю.

...