Razor MVC 5详细信息页面中的删除操作
在这个MVC5项目中,我希望我的详细信息页面也可以用作编辑页面和删除页面 我通过创建两个表单来完成这项任务,其中一个表单包含更新数据所需的所有内容,包括提交按钮Razor MVC 5详细信息页面中的删除操作,razor,model-view-controller,edit,asp.net-mvc-5,details,Razor,Model View Controller,Edit,Asp.net Mvc 5,Details,在这个MVC5项目中,我希望我的详细信息页面也可以用作编辑页面和删除页面 我通过创建两个表单来完成这项任务,其中一个表单包含更新数据所需的所有内容,包括提交按钮 @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.HiddenFor(model => model.EmpresaID) ... <input type="submit" class="btn btn-primary" va
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaID)
...
<input type="submit" class="btn btn-primary" value="Submeter" />
}
发送到
.../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");
}
//POST:Empresa/Delete/5
[HttpPost,ActionName(“删除”)]
[ValidateAntiForgeryToken]
公共异步任务删除已确认(int-id)
{
Empresa Empresa=等待db.Empresas.FindAsync(id);
db.Empresas.Remove(empresa);
等待db.saveChangesSync();
返回操作(“索引”);
}
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");
}
//POST:Empresa/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务删除([Bind(Include=“EmpresaID,Nome,Estado,Severidade,Inicio,Fim”)]Empresa Empresa)
{
//对发布的viewModel执行一些操作
Empresa e=等待db.Empresas.FindAsync(Empresa.EmpresaID);
db.Empresas.移除(e);
返回操作(“索引”);
}
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>
}
@使用(Html.BeginForm(“Delete”、“Empresa”、FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model=>model.EmpresaID)
@ActionLink(“删除”,“删除”,新的{id=Model.EmpresaID})
删除
}
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");
}
//POST:Empresa/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务删除([Bind(Include=“EmpresaID,Nome,Estado,Severidade,Inicio,Fim”)]Empresa Empresa)
{
//对发布的viewModel执行一些操作
Empresa e=等待db.Empresas.FindAsync(Empresa.EmpresaID);
db.Empresas.移除(e);
等待db.saveChangesSync();
返回操作(“索引”);
}
EDIT2唯一的问题是我忘记保存更改
它现在工作正常。您需要告诉表单要完成的操作以及
FormMethod
,即GET
或POST
。例如,对于您的删除操作,如下所示:
@model MyProject.SomeViewModel
@using (Html.BeginForm("Delete", "Empresa", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaId)
<button type="submit" class="btn btn-danger" value="Delete">Delete</button>
}
//EmpressasController
//职位:Empresas/Delete/5
[HttpPost,ActionName(“删除”)]
[ValidateAntiForgeryToken]
公共行动结果删除已确认(内部id)
{
var empresa=_db.Empresas.Find(id);
如果(empresa!=null)_db.Empresas.Remove(empresa);
_db.SaveChanges();
返回操作(“索引”);
}
//剃刀视图
@使用(Html.BeginForm(“Delete”,“Empresas”,FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model=>model.EmpresaId)
删除
}
请显示操作方法的代码。请参阅更新的问题@buffjapeIs表单发布之前或之后的404错误?您还需要在db.Empresas(e)
行之后保存对数据库的更改,如sodb.SaveChanges()
。加上在此上下文中e
是什么?这就是问题所在Gareth,我忘记了保存更改的命令。e是我要删除的Empresa。谢谢你@Gareth的输入,所以我修改了我的代码,但仍然无法删除。它正在工作,我需要保存更改。等待db.saveChangesSync();
// 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");
}
@model MyProject.SomeViewModel
@using (Html.BeginForm("Delete", "Empresa", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaId)
<button type="submit" class="btn btn-danger" value="Delete">Delete</button>
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(SomeViewModel viewModel)
{
//Do something with the posted viewModel
return RedirectToAction("Index");
}
// EmpressasController
// POST: Empresas/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
var empresa = _db.Empresas.Find(id);
if (empresa != null) _db.Empresas.Remove(empresa);
_db.SaveChanges();
return RedirectToAction("Index");
}
// Razor View
@using (Html.BeginForm("Delete", "Empresas", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EmpresaId)
<button type="submit" class="btn btn-danger">Delete</button>
}