2013-05-27 58 views
0

對不起,我的英語不好,但讓我們來解決這個問題。Ajax.actionlink()不支持POST方法(500內部服務器錯誤)

我試圖做一個POST到動作控制器的完整發生, 但行動沒有收到POST和JavaScript控制檯返回該錯誤 500內部服務器錯誤

這是我Ajax.actionlink()

@Ajax.ActionLink("Complete", "Complete", "Occurrence", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" }) 

這是我的訴權ñ完成到控制器發生

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Complete(int id) 
{ 
    return new HttpStatusCodeResult(200); 
} 

有人昏倒了同樣的情況? 感謝您的關注!

回答

1

您的操作使用[ValidateAntiForgeryToken]進行了裝飾,這意味着它會預期反僞造令牌被髮送到POST請求有效內容中。情況並非如此。在您的請求中,您只能發送一些id(new { id = Model.Id })。

一旦可能的解決方法是使用Ajax.BeginForm代替其中將包含抗僞造的令牌:

@using (Ajax.BeginForm("Complete", "Occurrence", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" })) 
{ 
    @Html.AntiForgeryToken() 
    <button type="submit">Complete</button> 
} 

Html.AntiForgeryToken()將生成包含將隨着被髮送所需的防僞造令牌隱藏字段AJAX請求到服務器。

+0

非常感謝你,現在我知道什麼是問題,幾乎是瘋了。 –