在标准MVC应用程序中,带有视图的脚手架控制器使用此Razor形式提供Delete
视图:
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
<div class="form-actions no-color">
<input type="submit" value="Delete" class="btn btn-default" /> |
@Html.ActionLink("Back to List", "Index")
</div>
}
Delete
视图中没有任何地方隐藏或隐藏任何id
字段。
然后该视图的控制器执行此操作:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(long id)
{
....
}
此操作从哪里获取其id
参数值?在某种模型绑定过程中,它是否以某种方式从发布的唯一表单值,防伪标记__RequestVerificationToken
中提取出来?
答案 0 :(得分:1)
当您重定向到Delete
操作时,ID会作为参数传递:
[HttpGet]
public ActionResult Delete(long id)
{
return View();
}
并且由于它是原始网址的一部分(在显示删除视图时查看您的浏览器地址栏),它将由Html.BeginForm()
帮助程序保留 - 现在查看生成的HTML标记,然后您会看到这个:
<form action="/somecontroller/delete/123" method="post">
...
</form>
id
来自的地方 - 生成表单的操作。
答案 1 :(得分:0)
因为你有一个带签名的GET方法
public ActionResult Delete(long id)
并且您使用默认路线(或至少包含/{id}
的路线定义)
url: "{controller}/{action}/{id}"
当您导航到该方法时,请说使用/yourController/Delete/10
,id
的值为10
,并将其添加到{{1}的action
属性中您的<form>
方法生成的代码。提交表单时,Html.BeginForm()
参数的值绑定到表单id
属性中的路由值(action
读取表单集合中的值(您可能具有的任何输入) )以及路由值和查询字符串(以及其他)