MVC删除没有达到HttpPost方法

时间:2014-04-08 06:23:11

标签: c# asp.net-mvc-3 http-post http-get

我正在使用MVC3。我了解到使用HttpGet方法删除项目是一种不好的做法,因为任何人都可以浏览到url并删除项目。所以我想对HttpPost方法执行删除操作。

问题在于,当我单击“删除”按钮时,它仅在HttpGet方法上被点击,但在HttpPost方法上却没有。

我使用了webgrid及其index.cshtml文件

<div id="DataTable">
@grid.GetHtml(htmlAttributes: new {id="gvMovies" },
columns:grid.Columns(
grid.Column("Title","Movie Title",canSort:true),
grid.Column("Director","Film Maker",canSort:false),   
grid.Column(header:"Action",
format:@<text>
<a href="@Url.Action("Edit", "Movies", new { id = @item.Id })">Edit</a>
@using (Html.BeginForm("Delete", "Movies", new { id = @item.id }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ActionLink("Delete", "Delete", new { id = @item.id }, new { onclick = "return confirm('Are you sure you wish to delete this article?');" })
}

</text>)))
</div>

控制器页面如下

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Delete(int id)
    {
        return RedirectToAction("Index");
    }

2 个答案:

答案 0 :(得分:0)

从概念上讲,使用POST动词进行删除是不正确的。 POST - 用于发布信息。正确的方法是从Delete方法中删除属性,然后使用GET动词。

现在,如果你真的真的需要使用POST,那么你的第一个错误就是你创建了一个链接,而不是提交表单的提交按钮。取代

  @Html.ActionLink("Delete", "De...

使用:

  <input type="submit" value="Delete">

答案 1 :(得分:0)

您必须添加提交按钮而不是链接,因此您必须更改
@Html.ActionLink("Delete"<input type=submit value="del" >

如果你想在帖子中发送id,你可以在表单中添加隐藏的输入,这样你就可以在表单中的提交按钮之前添加这样的东西

<input type="hidden" value=@item.Id name="itemid" >

所以我认为这段代码会起作用

    @using (Html.BeginForm("Delete", "Movies", new { id = @item.id }, FormMethod.Post, new { enctype = "multipart/form-data" }))

    {
       <input type="hidden" value=@item.Id name="itemid" >
      <input type=submit value="del" >
    }