jQuery发布有500内部服务器错误?

时间:2014-08-23 06:34:35

标签: jquery asp.net asp.net-mvc asp.net-mvc-5

jQuery发布事件是

<script>
    $(document).ready(function () {
        $("#going").click(function () {
            $.post("/Home/ToggleGoing", 
             { 
                 going: $("#going").val() 
             }, 
             function (data) {
               //No success code.   
            });
        });
    });
</script>

控制中的行动是

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult ToggleGoing(bool going, int? id)
    {
        var e = db.Events.FindAsync(id);

然而,javascript控制台显示它有500错误?

POST https://localhost:44300/Home/ToggleGoing 500 (Internal Server Error)

3 个答案:

答案 0 :(得分:3)

这:ValidateAntiForgeryToken

使用$.post()时,不包含包含验证令牌的隐藏字段。您需要将其包含在POST数据中:

$.post("/Home/ToggleGoing", 
    { 
        going: $("#going").val(),
        __RequestVerificationToken: $('input[name="__RequestVerificationToken"]').val()
    }, function (data) {

});

当然,这假设您已在某处向您的表单添加@Html.AntiForgeryToken()

答案 1 :(得分:1)

更正您的帖子网址:

$.post("/Home/ToggleGoing", { going: $("#going").val() , id:???//pass value of id }, function (data) {})

确保going的类型为bool

编辑: -

正如我在评论部分中的建议为提问者工作所以我也在回答这个问题。

只需从帖子控制器中移除[ValidateAntiForgeryToken]令牌,或在ValidateAntiForgeryToken中添加$.Post()作为参数。

答案 2 :(得分:0)

我已经回答了几乎类似的问题:

How to get {ID} in url “controller/action/id” in a post action?

正如上面的答案所述,你也错过了url末尾的id,因为它被映射为&#34; {controller} / {action} / {id}&#34;在RegisterRoutes方法的RouteConfig.cs文件中。因此,您更正的网址将是:

"/Home/ToggleGoing/{id}"  //in your case: "/Home/ToggleGoing/4"

接下来是&#34;去&#34;是bool参数。并且检查复选框是否被检查&#34; val()&#34;不是正确的方法,你应该用它:

$("#going").is(':checked')
相关问题