为什么我的JQuery函数将空JSON字符串POST到我的控制器?

时间:2016-07-27 18:23:08

标签: c# jquery

当我的JQuery函数执行时,我将全局变量写入控制台以确保其中包含某些内容。有:24个JSON对象。

然而,当函数尝试将此全局变量POST回服务器时,该方法将获得一个空的JSON对象,而不是我正在寻找的24个项目。

这里是JQuery函数:

$("#dismissBtn").on('click', function() 
{
    console.log(attendeeClassesGlobal);
    alert("Check the console");
    // Dismiss button has been clicked, so let's deal
    // with the classes for this attendee
    $.ajax({
        url: "/Class/DismissAttendeeFromAllClasses/",
        type: "POST",
        data: { attendeeClassesGlobal, __RequestVerificationToken: $('input[name=__RequestVerificationToken]').val() },
        dataType: "json",
        success: function (attendeeClasses) {

        },
        error: function (xhr, ajaxOptions, thrownError) {
            if (xhr.responseText !== "") {
                alertify.alert(xhr.responseText);
                alertify.error(xhr.responseText);
            }
        }

    });
});

我在该函数调用的控制器方法中设置了断点。当我检查传入的JSON参数时,它为空。我无法理解的是为什么全局变量在JQuery函数中有24个对象,但是传递了null。这是处理POST的C#方法:

public ActionResult DismissAttendeeFromAllClasses(string json)
{
    if (!Employee.CurrentUser.CanEditAttendees)
    {
        throw new ArgumentException("You are not authorized to perform this action");
    }

    var attendeeClasses = JsonConvert.DeserializeObject<IList<AttendeeClassViewModel>>(json);

    foreach (var attendeeClass in attendeeClasses)
    {
        Console.WriteLine(attendeeClass);
    }

    return this.Json(null);
}

所以,我猜测我将JSON对象发送到POST处理程序的方式是错误的。我希望有人能指出我在这里做错了什么。

编辑:谢谢大家,感谢您的建议。我试过这些都无济于事。仅供参考,当我在开发工具中将其记录到控制台时,这就是我的全局变量。这个数组中有24个对象:

Console output

我看不出有什么问题,但也许我错过了什么?

编辑#2:我忘了提到即使JSON.stringify没有帮助。虽然它使我的JSON对象在控制台中看起来很好,但它们永远不会成为我的控制器方法,因为字符串json总是为空而不是填充我期望的24个JSON对象。

编辑#3:我似乎没有匹配的参数名称。作为ajax / mvc POSTing的新手,我不知道这个要求。这解决了我的问题。感谢所有提供的建议!

2 个答案:

答案 0 :(得分:0)

为什么不将控制器中的参数定义为对象并让序列化程序映射对象而不是发送字符串?

public ActionResult DismissAttendeeFromAllClasses(IEnumerable<MyViewModel> json)
{
    //Do stuff
}

编辑:

在发送集合时,您应该相应地更新控制器。

还在请求中包含contentType: "application/json; charset=utf-8"

答案 1 :(得分:0)

JQuery post函数中的参数名称与控制器方法中的参数名称不匹配。修复后,问题就解决了。