简体   繁体   English

Json对象未传递给Web API方法

[英]Json object not being passed to web api method

I've been at this for hours now and still not got it right... someone please put me out of my misery! 我已经在这里呆了几个小时了,但还是做错了……有人请把我从痛苦中解救出来!

javascript: 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);
            }
        });
    }

model: 模型:

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

Server code: 服务器代码:

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

If I debug it, the "cp" parameter in the javascript postData function is: 如果我对其进行调试,则JavaScript postData函数中的“ cp”参数为:

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

and yet in my web method, calcname is "nothing" and components is "0.0" 但是在我的网络方法中,calcname是“ nothing”,而组件是“ 0.0”

If I don't use JSON.Stringify I get a null object in my web method. 如果我不使用JSON.Stringify,则会在我的Web方法中得到一个空对象。 I think I had one version of code where the calcName was passed but the components value was still zero. 我想我有一个版本的代码,其中传递了calcName,但组件值仍然为零。 That was when I just called "return postData(JSON.stringify(calcParams))" I think. 那是我刚刚打电话给“ return postData(JSON.stringify(calcParams))”的时候。

You only need to send the object parameters in the JSON: 您只需要在JSON中发送对象参数:

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

However your JQuery Object needs to have the same parameter names as your Server object. 但是,您的JQuery对象需要具有与服务器对象相同的参数名称。 Change your server object to be: 将您的服务器对象更改为:

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

OR change your client object: 或更改您的客户端对象:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM