我已经在这几个小时了,但仍然没有做对......有人请把我从痛苦中解救出来!
的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”,组件是“0.0”
如果我不使用JSON.Stringify,我的web方法中会得到一个null对象。我想我有一个版本的代码,其中calcName被传递但组件值仍为零。那时我刚刚调用“return postData(JSON.stringify(calcParams))”我认为。
答案 0 :(得分:1)
您只需要在JSON中发送对象参数:
return postData(JSON.stringify(calcParams)) ...
但是,您的JQuery Object需要具有与Server对象相同的参数名称。将您的服务器对象更改为:
Public Class calcParams2
Public calcName As String
Public components As Double
End Class
或更改您的客户对象:
var calcParams = {}
calcParams.calcName="gwp_mat";
calcParams.calcNumber=124.332;