2

私はgetを見逃してHttpPostを削除する方法をウェブで探していましたが、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メソッドです。

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

それが私のかみそりの見方です。

以下は私が得るエラーです

パラメータディクショナリには、'GenericSaving.Controllers.MemberController'のメソッド'System.Web.Mvc.ActionResult Delete(System.Guid)'のnull許容型ではないタイプ'System.Guid'のパラメータ'id'のnullエントリが含まれています。オプションパラメータは、参照型またはnull許容型であるか、オプションパラメータとして宣言されている必要があります。パラメータ名:パラメータ

そのため、その前にエラーをpingするため、メソッドを中断することはできません。最初の推測では、GuidIDがパラメーターに渡されていません。それで、私のフォームに基づいて、何がうまくいかないのですか?

おそらく解決策として、フォームの隠しフィールドに配置できると思いましたか?postメソッドでこのフィールドの内容をどのように収集しますか?

4

1 に答える 1

6

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" />
}
于 2013-03-12T10:02:48.610 に答える