在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)
}
答案 0 :(得分:3)
确保OrderDetail.Id
本身以及OrderDetail.OrderId
和OrderDetail.MovieId
属性在表单中都显示为隐藏字段。
通过这种方式,当您将其发回服务器时,您可以在操作中跟踪此Movie
所属的Order
和OrderDetail
。