Razor MVC 5详细信息页面中的删除操作

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

在这个MVC5项目中,我希望我的详细信息页面也可以用作编辑页面和删除页面

我通过创建两个表单来完成这项任务,其中一个表单包含更新数据所需的所有内容,包括提交按钮

@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)
行之后保存对数据库的更改,如so
db.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>
}