使用JQuery / JavaScript发布然后使用MVC返回值

时间:2016-03-12 08:32:24

标签: jquery json ajax asp.net-mvc

我是MVC新手来自webforms,我正试图了解AJAX。

我想在部分视图中单击一个按钮,调用存储过程来更新计数,然后返回从存储过程返回的当前总计数。

我的Jquery看起来像这样。

function setLikeStatus(id) {
    var param = {
        dayId: id
    };

    $.ajax({
        url: "/YourDay/LiveHeartClicked",
        contentType: "application/x-www-form-urlencoded",
        type: "POST",
        datatype: "json",
        data: param,
        error: function (xmlHttpRequest, errorText, thrownError) {
            alert(xmlHttpRequest + "," + errorText + "," + thrownError);
        },
        success: function (data) {
            alert(data);
        }
    });
}

我的方法在我的控制器中看起来像这样,我不确定我是否应该在这里使用动作结果或JsonResult。我已经厌倦但都失败了。

    [HttpPost]
    [ValidateAntiForgeryToken]
    [Authorize]
    public JsonResult LiveHeartClicked(int dayId)
    {
        YourDayEntities3 context = new YourDayEntities3();
        string userId = getUserId();
        var countLikes = context.CreateDayLike(dayId, userId);
        return Json(countLikes);
    }

当我点击按钮时,我刚收到响应'[object Object] | error | Internal Server Error'。

任何帮助都会受到谴责。

1 个答案:

答案 0 :(得分:1)

使用ActionResultJsonResult并不重要,尽管使用更具体的JsonResult会使您的方法更加清晰。

您收到错误,因为该方法标有[ValidateAntiForgeryToken]且您尚未发送令牌。从方法中删除属性。此外,请删除contentType: "application/x-www-form-urlencoded",选项。

您还应该使用url: '@Url.Action("LiveHeartClicked", "YourDay")',来确保正确生成您的网址。