deleteconfirmed操作从asp.net mvc中获取Id

时间:2015-03-21 19:36:29

标签: asp.net-mvc

也许这个问题已被提出但从未回答!!

deleteconfirmed方法如何通过post方法获取id?

  • 没有包含Id的隐藏字段。

  • 我篡改了数据以更改引用Url,使其不再包含id,但deleteconfirmed操作仍然获取在get期间传递的正确ID。

然后从哪里来?

这是代码,get方法:

[HttpGet]

public ActionResult Delete(int? id)
    {
        if (id == null)
        {
            return RedirectToAction("Index");
        }
        Driver driver= db.Drivers.Find(id);
        if (driver== null)
        {
            return RedirectToAction("Index");
        }
        return View(driver);
    }


    // POST: /Driver/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {

        Driver driver= db.drivers.Find(id);
        db.drivers.Remove(driver);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

1 个答案:

答案 0 :(得分:3)

Html.BeginForm()帮助器会根据action

中的路径定义将路径参数添加到表单RouteConfig.cs操作属性中

假设您有默认路由url: "{controller}/{action}/{id}",,那么如果您将值(例如)5传递给Delete(int? id) get方法,那么如果您检查表单标记,则会看到<form action="/YourController/Delete/5" ...> 。请注意,如果传递给视图的模型具有名为id的属性。

,也会添加此项

发布表单时,DefaultModelBinder读取表单字段的值(Request.Form),还会读取路由数据和查询字符串参数的值,因此即使您没有隐藏的输入对于id,它是根据路径参数设置的。