Я использую один MVC контроллер действий, называемый «Редактировать», чтобы позволить мне редактировать, создавать или копировать записи. Однако модель View для этого действия не передает идентификаторы модели последовательно, когда я пытаюсь удалить записи. Вот кнопка, которая вызывает действие удаления.
<input class="btn btn-info btn-danger" asp-controller="Bags" asp-action="Delete" asp-route-id="@Model.Id" onclick="alert(@Model.Id);" type="submit" value="Yes" />
Эта строка кода позволяет мне удалить отредактированную или созданную запись, но когда я пытаюсь удалить вновь скопированную запись, идентификатор, который передается на удаление action - это идентификатор исходной записи, а не скопированной записи.
Вот код действия редактирования, которое создает / редактирует / копирует записи и вызывает представление.
// GET: Bags/Edit/5
[HttpGet]
public async Task<IActionResult> Edit(int? id, bool? copy)
{
Bagsmvc bag = new Bagsmvc();
ViewBag.Copy = false;
// When id is not null, we are editing or copying. Otherwise, we're creating
// EDIT a bag
if(id != null)
{
bag = await _db.Bags.FirstOrDefaultAsync(x => x.Id == id);
} else
// CREATE a new blank bag
{
await _db.Bags.AddAsync(bag);
await _db.SaveChangesAsync(); ;
}
// COPY a bag
// This is a real hack. Once the button is hit, the bag is copied and saved to the db. Setting Id = 0 somehow
// indicates to the Entity Framework to add the record in with a newly generated ID.
// Also, since we don't want an exact copy, bring user to edit screen to make the changes.
if (copy != null)
{
ViewBag.Copy = true;
bag.Id = 0;
await _db.Bags.AddAsync(bag);
await _db.SaveChangesAsync(); ;
}
return View(bag);
}
Now Вот несколько снимков экрана, на которых видно, что номер мешка верен на виде. Но когда я отправляю «Да», отладчик подтверждает, что старый идентификатор передается действию удаления.
Я нажимаю «Копировать сумку» для старой записи # 3079. Код создает новый элемент # 3088, который я собираюсь удалить.
Я подтверждаю удаление, и каким-то образом действие Удалить считает, что я удаляю исходная запись (id = 3079 в отладчике), а не копия 3088 (к чему должен быть привязан @ Model.Id)
Любая идея, что происходит?