Ajax.actionlink()无法使用POST方法(500内部服务器错误)

时间:2013-05-27 12:58:10

标签: ajax asp.net-mvc-4

抱歉我的英语不好,但让我们来解决问题。

我正在尝试对控制器发生的操作完成进行操作, 但是操作没有收到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 个答案:

答案 0 :(得分:2)

您的操作使用[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请求一起发送到服务器。