我有 Action 方法和 View 用于编辑某些项目的属性。
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = "Admin")]
public async Task<ActionResult> Edit(Item item)
{
if (ModelState.IsValid)
{
db.Entry(item).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
ViewBag.CatagorieId = new SelectList(db.Catagories, "ID", "Name", item.CatagorieId);
return View(item);
}
和
@model OpenOrderFramework.Models.Item
@using OpenOrderFramework.Extensions
@{
ViewBag.Title = "edit";
}
<h2>Editing</h2>
@using (Html.BeginForm())
{
<div class="form-horizontal">
<h4>The car</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.ID)
<-- etc -->
但是当我提交表单时出现错误
存储更新、插入或删除语句影响了意外数量的行 (0)。
我发现即使项目的真实 ID 不同,发布的项目的操作方法 ID 也始终为 0。
为什么会这样?
GET 动作方法:
// GET: Items/Edit/5
[Authorize(Roles = "Admin")]
public async Task<ActionResult> Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Item item = await db.Items.FindAsync(id);
if (item == null)
{
return HttpNotFound();
}
ViewBag.CatagorieId = new SelectList(db.Catagories, "ID", "Name", item.CatagorieId);
return View(item);
}