我试图简单地将一些值从Javascript传递到我的代码隐藏处进行处理。
我只想将Number
和Message
传递给WebMethod
,但根据我改变的内容得出不同的错误。
JS:
function SendMessage() {
var number = document.getElementById("number").value;
var message = document.getElementById("message").value;
var msg = {
"Number": number,
"Message": message
};
$.ajax({
type: "POST",
url: "Default.aspx/SendMessage",
data: JSON.stringify(msg),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert("Message sent");
},
error: function (msg) {
alert("Message call failed");
}
});
}
在我的代码隐藏中,我有一个WebMethod
已定义,还有一个Message
类来保留我的信息
[WebMethod]
public static void SendMessage(string message)
{
//Create a TMessage and deserialize to it
}
Message
:
public class TMessage
{
public string Number { get; set; }
public string Message { get; set; }
}
我的理解是我收到JSON并应将其反序列化为Message
类型。
但是我在SendMessage
方法中有一个断点,它永远不会被击中,返回的错误是:
Message=Invalid web service call, missing value for parameter: 'message'.
从前面的一些游戏中,我能够通过将参数从string
更改为object
来获得断点(以及对数据的一些更改:Ajax调用中的值),但是我似乎收到了Dictionary
而我无法将其投放到TMessage
。
感谢您的任何建议。
答案 0 :(得分:1)
如果你清楚地看一下webmethod,它只有一个参数,即message
。
您需要将此传递给ajax调用。 - var params = "{'message':'" + message + "'}";
有用的链接 - Send JSON to webmethod?
function SendMessage() {
var number = document.getElementById("phonenumber").value;
var message = document.getElementById("message").value;
var params = "{'message':'" + message + "', 'number':'" + number + "'}";
$.ajax({
type: "POST",
url: "Default.aspx/SendMessage",
data: params,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert("Message sent");
},
error: function (msg) {
alert("Message call failed");
}
});
}