В этом проекте MVC5 я хочу, чтобы страница сведений также отображалась как страница «Редактировать» и «Удалить».MVC 5 Удалить действие в деталях Страница
Я решаю эту задачу, создав 2 формы, причем все необходимое для обновления данных, включая кнопку отправки.
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaID)
...
<input type="submit" class="btn btn-primary" value="Submeter" />
}
Теперь, для моей второй формы, я поясню есть кнопка Удалить:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaID)
<input type="submit" class="btn btn-danger" value="Delete" />
}
Ошибка:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] DeleteConfirmed(Int32)'
Я пытался использовать ActionLink, но затем я получаю HTTP 404. Что странно, поскольку меня направляют в правильное место назначения:
@Html.ActionLink("Delete", "Delete", new { id = Model.EmpresaID })
Посылает
.../Empresa/Delete/6
EDIT1
Действие Метод:
// POST: Empresa/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(int id)
{
Empresa empresa = await db.Empresas.FindAsync(id);
db.Empresas.Remove(empresa);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
EDIT2
Действие Метод
// POST: Empresa/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Delete([Bind(Include = "EmpresaID,Nome,Estado,Severidade,Inicio,Fim")] Empresa empresa)
{
//Do something with the posted viewModel
Empresa e = await db.Empresas.FindAsync(empresa.EmpresaID);
db.Empresas.Remove(e);
return RedirectToAction("Index");
}
Details.cshtml:
@using (Html.BeginForm("Delete", "Empresa", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaID)
@Html.ActionLink("Delete", "Delete", new { id = Model.EmpresaID })
<button type="submit" class="btn btn-danger" value="Delete">Delete</button>
}
ActionLink не показывает никаких ошибок, но ничего не удалять либо.
Кнопка дает мне HTTP 404. Что я здесь делаю неправильно?
EDIT3
// POST: Empresa/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Delete([Bind(Include = "EmpresaID,Nome,Estado,Severidade,Inicio,Fim")] Empresa empresa)
{
//Do something with the posted viewModel
Empresa e = await db.Empresas.FindAsync(empresa.EmpresaID);
db.Empresas.Remove(e);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
Единственная проблема с EDIT2 было то, что я забыл, чтобы сохранить изменения.
Теперь он работает правильно.
Пожалуйста, покажите код для метода действий. – buffjape
см. Обновленный вопрос @buffjape – Lernas
Является ли ошибка 404 до или после опубликованной формы? Вам также необходимо сохранить изменения в базе данных так: 'db.SaveChanges()' после строки 'db.Empresas (e)'. Плюс, что такое 'e' в этом контексте? – Gareth