ASP.NET MVC 3 Delete Http Post



我一直在网上寻找如何做只是一个删除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");
    }

这是我的Post Method。

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

这是我的Razor视图。

下面是我得到的错误

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

所以,我不能在方法上中断,因为它在那之前ping错误,我的第一个猜测是它没有传递Guid ID给参数。根据我的表格,哪里出错了?

我想,也许作为一个解决方案,我可以把它在一个隐藏的字段上的形式?如何在post方法中收集此字段的内容?

您正在为beginForm使用错误的重载方法。请点击此处查看正确用法。像这样使用:

Html.BeginForm("action","controller", new { Id = item.ID}, FormMethod.Post);

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

最新更新