【问题标题】:Json object not being passed to web api methodJson 对象未传递给 web api 方法
【发布时间】:2013-11-01 22:06:58
【问题描述】:

我已经做了好几个小时了,但还是没弄好……有人请让我摆脱痛苦!

javascript:

        var calcParams = {}
        calcParams.calcName="gwp_mat";
        calcParams.components=124.332;

        //return manager.impactCalc(calcName, componentArray)
        return postData("{calcParams2:" + JSON.stringify(calcParams) + "}")
            .then(querySucceeded)
            .fail(queryFailed);


    function postData(cp) {
        $.ajax({
            type: "POST",
            dataType: "json",
            contentType: "application/json",
            url: "/api/breeze/testCalc",
            data: cp,
            success: function (data) {
                alert(data);
                return data;
            },
            error: function (error) {
                jsonValue = jQuery.parseJSON(error.responseText);
            }
        });
    }

型号:

Public Class calcParams2
    Public calcName As String
    Public calcNumber As Double
End Class

服务器代码:

<System.Web.Services.WebMethod()> _
Public Function testCalc(cp As calcParams2) As Double
    Dim c As New calcs
    Return cp.calcNumber
End Function

如果我调试它,javascript postData函数中的“cp”参数是:

"{calcParams2:{"calcName":"gwp_mat","components":124.332}}"

然而在我的网络方法中,calcname 是“nothing”,components 是“0.0”

如果我不使用 JSON.Stringify,我会在我的 web 方法中得到一个空对象。我想我有一个版本的代码,其中传递了 calcName 但组件值仍然为零。那是我刚刚调用“return postData(JSON.stringify(calcParams))”的时候。

【问题讨论】:

    标签: javascript jquery json asp.net-web-api


    【解决方案1】:

    您只需要在JSON中发送对象参数:

    return postData(JSON.stringify(calcParams)) ...
    

    但是,您的 JQuery 对象需要与您的服务器对象具有相同的参数名称。将您的服务器对象更改为:

    Public Class calcParams2
        Public calcName As String
        Public components As Double
    End Class
    

    或更改您的客户端对象:

    var calcParams = {}
    calcParams.calcName="gwp_mat";
    calcParams.calcNumber=124.332;
    

    【讨论】:

    • jQuery 为您完成所有编码/字符串化 - 您可以直接传递对象。除了按照建议进行服务器端编辑之外,OP 应该这样做:return postData({calcParams2:calcParams})
    • 噢!我创建了“calcparams2”作为复制的测试,忘记更改第二个属性名称。伙计,那是愚蠢的。但是...只有 Jonny S 的答案有效。我必须在那里调用 JSON.stringify ,否则 Web 方法什么也接收不到。我尝试使用 ({calcParams2: calcParams}) 并没有通过。出于某种原因,我需要在那里“stringify”才能工作。我不知道为什么......
    猜你喜欢
    • 2013-12-12
    • 2023-03-03
    • 2016-08-10
    • 2012-12-13
    • 2017-05-26
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多