【发布时间】:2017-01-19 03:11:37
【问题描述】:
我想在数据库中编辑这些数据并返回新数据
当我点击保存按钮数据没有改变
这是控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(CustomPerformancePerformersModel customPerformancePerformersModel)
{
if (ModelState.IsValid)
{
int perfromanceId = Convert.ToInt32(TempData.Peek("CurrentPerformanceId"));
customPerformancePerformersModel.performanceObj = db.Performances.Where(x => x.PerformanceId == perfromanceId).FirstOrDefault();
db.Entry(customPerformancePerformersModel.performanceObj).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.EventId = new SelectList(db.Events, "EventId", "Name", customPerformancePerformersModel.performanceObj.EventId);
ViewBag.VenueId = new SelectList(db.Venues, "VenueId", "Name", customPerformancePerformersModel.performanceObj.VenueId);
ViewBag.Performers = new SelectList(db.PerformerPerformances, "Performers", "Name", customPerformancePerformersModel.performanceObj.PerformerPerformances);
return View(customPerformancePerformersModel.performanceObj);
}
这里是html:
<div class="form-group">
@Html.LabelFor(model => model.performanceObj.IsVisible, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div class="checkbox">
@Html.EditorFor(model => model.performanceObj.IsVisible)
@Html.ValidationMessageFor(model => model.performanceObj.IsVisible, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.performanceObj.IsFeatured, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div class="checkbox">
@Html.EditorFor(model => model.performanceObj.IsFeatured)
@Html.ValidationMessageFor(model => model.performanceObj.IsFeatured, "", new { @class = "text-danger" })
</div>
</div>
【问题讨论】:
-
是否调用了您的编辑操作?
-
能否粘贴整个表单 html 以及提交按钮和相关的 javascript(如果有)?你的编辑操作有断点吗?
-
我猜想通过执行 customPerformancePerformersModel.performanceObj = db.Performances.Where(x => x.PerformanceId == perfromanceId).FirstOrDefault();您正在覆盖对模型的任何更改。所以在保存已经存在的东西。而是像您已经做的那样从数据库中获取性能,但是到一个局部变量中。然后用 CustomerPerformanceModel 中的数据更改它的数据,然后保存该局部变量
-
customPerformancePerformersModel.performanceObj = db.Performances.Where(x => x.PerformanceId == perfromanceId).FirstOrDefault();正在从数据库中获取对象。这将覆盖performanceObj中在编辑表单中提交的任何值。 -
@amalmansour 不要删除链接声明。但不是将语句的值设置为 customPerformancePerformersModel.performanceObj,而是将其设置为一个新变量。
var performance = db.Performances.Where(x => x.PerformanceId == perfromanceId).FirstOrDefault();然后在性能变量中设置 customPerformancePerformersModel.performanceObj 的值。然后只需保存更改,它应该可以工作
标签: c# html asp.net-mvc-4