删除视图和操作如何获取模型ID?

时间:2017-03-12 05:29:48

标签: asp.net asp.net-mvc http razor asp.net-mvc-5

在标准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中提取出来?

2 个答案:

答案 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/10id的值为10,并将其添加到{{1}的action属性中您的<form>方法生成的代码。提交表单时,Html.BeginForm()参数的值绑定到表单id属性中的路由值(action读取表单集合中的值(您可能具有的任何输入) )以及路由值和查询字符串(以及其他)