2013-03-12 98 views
2

我一直在網上尋找如何做一個刪除HttpPost錯過了獲取,我讀過它是安全的做一個職位,而不是一個Get,所以那就是我想要做的。ASP.NET MVC 3刪除Http Post

[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" /> 
} 

這是我的剃刀視圖。

以下是錯誤我得到

參數字典包含非可空類型的參數「ID」無效項「的System.Guid」的方法「System.Web.Mvc.ActionResult刪除( System.Guid)'在'GenericSaving.Controllers.MemberController'中。可選參數必須是引用類型,可爲空類型,或者聲明爲可選參數。 參數名:參數

所以,我可以不上的方法,因爲它之前然後坪錯誤打破,我的第一個猜測是,它不流通的GUID ID的參數。那麼基於我的形式出了什麼問題?

我認爲,也許作爲一種解決方案,我可以把它放在窗體上的隱藏字段?我將如何在post方法中收集此字段的內容?

+0

放在'Html.BeginForm休息( 「刪除」, 「會員」,FormMethod.Post,新{ID = item.ID}'看什麼'item.id'分配給查詢字符串對象時保存 – Silvermind 2013-03-12 10:05:03

回答

6

您對beginForm使用了錯誤的重載方法。檢查HERE是否正確使用。使用這樣的:

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

OR

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

好吧,所以我想你回答我的解決方案,所以第二位,也許一些解釋? – 2013-03-12 10:05:17

+0

是否真的需要使用隱藏字段時,查詢字符串已經保存了值''new {id = item.ID}' – Silvermind 2013-03-12 10:05:41

+0

我使用了錯誤的超載。 – 2013-03-12 10:06:28