编辑ASP.NET MVC中的订单详细信息

时间:2015-08-21 14:24:05

标签: c# asp.net asp.net-mvc asp.net-mvc-4

在ASP.NET MVC中编辑记录的标准方法如下:

//
// GET: /Movies/Edit/5
public ActionResult Edit(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

//
// POST: /Movies/Edit/5
[HttpPost]
public ActionResult Edit(Movie movie)
{
    if (ModelState.IsValid)
    {
        db.Entry(movie).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(movie);
}

问题在于我需要编辑订单详细信息(1个订单,许多详细信息),因此需要根据两个ID(订单和产品ID)进行编辑。它不起作用(我无法将OrderDetail项目作为动作参数)。我该如何解决这个问题?

感谢。

//
// GET: /Orders/EditDetails
public ActionResult EditDetails(int id, string productID)
{
   OrderDetail od = GetOrderDetail(id, productID);

   return View(od);
}

//
// POST: /Orders/EditDetails
[HttpPost]
public ActionResult EditDetails(OrderDetail od)
{
   if (ModelState.IsValid)
   {
      context.Entry(od).State = EntityState.Modified;
      context.SaveChanges();
      return RedirectToAction("Index");
   }
   return View(od);
}

编辑:以下是Shimmy要求的代码:

@using (Html.BeginForm("EditDetails", "Orders", FormMethod.Post))
{
   @Html.LabelFor(m => m.quantity)
   @Html.TextBoxFor(m => m.quantity)

   @Html.LabelFor(m => m.productID)
   @Html.DropDownListFor(m => m.productID, new SelectList((IEnumerable)ViewBag.productList, "productID", "fullProductName"))

   @Html.HiddenFor(model => model.orderID)
}

1 个答案:

答案 0 :(得分:3)

确保OrderDetail.Id本身以及OrderDetail.OrderIdOrderDetail.MovieId属性在表单中都显示为隐藏字段。

通过这种方式,当您将其发回服务器时,您可以在操作中跟踪此Movie所属的OrderOrderDetail