ASP.NET MVC 3删除Http Post

Cal*_*ton 2 c# razor asp.net-mvc-3

我一直在网上寻找如何做一个删除HttpPost错过了get,我已经读过做一个帖子而不是Get更安全,所以这就是我想要做的.

    [HttpPost]
    public ActionResult Delete(Guid id)
    {

        var member = GetSelectedMember(id);

        _repository.DeleteEntity(member);

        TempData["message"] = String.Format("Blog {0} has been deleted!", member.Name);

        return RedirectToAction("Index");
    }
Run Code Online (Sandbox Code Playgroud)

那是我的Post方法.

@using (Html.BeginForm("Delete", "Member", FormMethod.Post, new { id = item.ID }))
{
    <input type="image" src="Content/delete.png" />
}
Run Code Online (Sandbox Code Playgroud)

那是我的剃刀观点.

以下是我得到的错误

参数字典包含'GenericSaving.Controllers.MemberController'中方法'System.Web.Mvc.ActionResult Delete(System.Guid)'的非可空类型'System.Guid'的参数'id'的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数.参数名称:参数

所以,我不能打破这个方法,因为它在此之前ping了错误,我的第一个猜测是它没有将Guid ID传递给参数.所以基于我的形式出了什么问题?

我认为可能作为一种解决方案,我可以把它放在表格的隐藏字段中?我如何在post方法中收集此字段的内容?

Ali*_*hşi 6

你正在使用错误的重载方法beginForm.检查这里是否正确使用.使用这样:

Html.BeginForm("action","controller", new { Id = item.ID}, FormMethod.Post);
Run Code Online (Sandbox Code Playgroud)

要么

@using (Html.BeginForm("Delete", "Member", FormMethod.Post))
{
    @Html.Hidden("id", item.ID)
    <input type="image" src="Content/delete.png" />
}
Run Code Online (Sandbox Code Playgroud)