我尝试使用jquery 1.7.1和json2.js在aspx页面(asp.net 4.0)中将复杂对象发送到我的WebMethod
我所做的是将多个参数发送到同一页面上的web方法,现在我想将这些参数包装在一个对象中。
所以我的WebMethod看起来像这样:
[WebMethod]
public static string ValidateControlInput(PairValue pair)
{
var result = pair;
return String.Format("Valid");
}
我的javascript方法如下所示:
$(document).ready(ValidateInput);
function ValidatePairInput(codeId, descriptionId, labelId) {
var pair = CreatePairObject(codeId, descriptionId);
SendDataToValidate(pair, labelId);
}
function SendDataToValidate(dataToValidate, controlId) {
$.ajax({
type: 'POST',
url: 'NewDocument.aspx/ValidateControlInput',
contentType: 'application/json; charset=utf-8',
data: dataToValidate,
dataType: 'json',
success: function (data, textStatus) {
var result = data.d;
DisplayValidationMessage(controlId, result);
}
});
}
function DisplayValidationMessage(controlId, result) {
$('#' + controlId).text(result);
}
function CreatePairObject(codeId, descriptionId) {
var pair = { };
pair.Code = $('#' + codeId).val();
pair.Description = $('#' + descriptionId).val();
var DTO = { 'pair': pair };
return JSON.stringify(DTO);
}
不幸的是,这是行不通的。我在web方法中设置了一个断点,但这绝不会被击中。
如果我替换javascript方法中的代码' CreatePairObject'有了这个:
function CreatePairObject(codeId, descriptionId) {
return JSON.stringify({ code: $('#' + codeId).val(), description: $('#' + descriptionId).val() });
}
和网络方法:
[WebMethod]
public static string ValidateControlInput(string code, string description)
{
return String.Format("Valid");
}
它就像一个魅力。所以有人可以帮我这个吗?非常感谢任何帮助!
答案 0 :(得分:0)
我认为您的问题出在CreatePairObject
函数中,您编写了Code和Description大写,并且您嵌套了JSON对象(到达webmethod的对象是一个包含该对的“pair”属性的对象宾语)。
尝试直接序列化配对对象,而不是:
function CreatePairObject(codeId, descriptionId) {
var pair = { };
pair.code = $('#' + codeId).val();
pair.description = $('#' + descriptionId).val();
return JSON.stringify(pair);
}