2013-05-27 59 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

非常感谢你,现在我知道什么是问题,几乎是疯了。 –