也许这个问题已被提出但从未回答!!
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");
}
答案 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
,它是根据路径参数设置的。