我有一个javascript函数,它调用asp.net c#应用程序后面的代码中的方法。我将一个数组传递给JSON.stringify,它返回相当于下面jsonText值的字符串。以下值仅代表返回的记录之一。
var jsonText = "[{\"eacItem\":{\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\",\"AP\":\"201407\",\"EAC\":\"0\"}}]";
然后将该字符串传递给函数以调用后面代码中的方法。
$.ajax({
type: "POST",
traditional: true, //might be needed for serialization to work properly
url: pagePath + "/" + "TestMethod",
data: "{'eacArray':" + jsonText + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
alert("successfully posted data");
},
error: function (data) {
alert("failed posted data");
alert(postData);
}
});
这是后面代码中的方法。
[WebMethod]
public static void TestMethod(List<eacItem> eacArray)
{
//do something
}
这是与JSON数据集关联的类,作为方法的参数类型。
public class eacItem
{
public string ID { get; set; }
public string AP { get; set; }
public string EAC { get; set; }
}
传递给方法的数据包含记录,但值均为null,如下面的屏幕截图所示。我不确定为什么会发生这种情况,并希望得到任何帮助。
请求的其他信息。以下是eacArray中值的屏幕截图。
这是调试中的JSON字符串
JSON.stringify(eacArray)的结果 数据:“{'eacArray':”+ JSON.stringify(eacArray)+“}”,
“[{\” eacItem \ “:{\” AP \ “:\” 201407 \ “\ ”EAC \“:\ ”0 \“,\ ”ID \“:\” dc97d510-cd29-4a23 -af7f-36c0acfa1914 \ “}},{\” eacItem \ “:{\” AP \ “:\” 201304 \ “\ ”EAC \“:\ ”0 \“,\ ”ID \“:\” 69326e1b -8d69-431f-8a5b-29f8b279d74c \ “}},{\” eacItem \ “:{\” AP \ “:\” 201305 \” \ “EAC \”:\ “0 \”,\ “ID \” :\ “69326e1b-8d69-431f-8a5b-29f8b279d74c \”}},{\ “eacItem \”:{\ “AP \”:\ “201306 \” \ “EAC \”:\ “0 \”,\ “ID \”:\ “69326e1b-8d69-431f-8a5b-29f8b279d74c \”}}]“
以下是更正后的代码,以防任何人:
//Iterate through elements on page
$('ElementContainingValue').each(function () {
var ap = this.attributes.ap.value;
var id = this.attributes.id.value;
var eac = $(this).val();
var eacItem = { "AP": ap, "EAC": eac, "ID": id };
eacArray.push(eacItem);
});
var pagePath = window.location.pathname;
$.ajax({
type: "POST",
traditional: true, //might be needed for serialization to work properly
url: pagePath + "/" + "TestMethod",
data: "{'eacArray':" + JSON.stringify(eacArray) + "}",
// Contents of eacArray after stringify
// "[{\"AP\":\"201407\",\"EAC\":\"0\",\"ID\":\"dc97d510"},{\"AP\":\"201408\",\"EAC\":\"0\",\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\"}]
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
alert("successfully posted data");
},
error: function (data) {
alert("failed posted data");
alert(postData);
}
});
这是后面代码中调用的方法。
[WebMethod]
public static void TestMethod(List<eacItem> eacArray)
{
foreach (var eacItem in eacArray)
{
string ap = eacItem.AP;
string id = eacItem.ID;
string eac = eacItem.EAC;
}
}
这是与数组关联的类。
public class eacItem
{
public string ID { get; set; }
public string AP { get; set; }
public string EAC { get; set; }
}
答案 0 :(得分:3)
您的POST数据是:{'eacArray':" + jsonText + "}"
,其中不包含任何可以映射到eacItem
的信息(没有匹配的属性等)。
验证您是否在请求中传递了JSON.stringify
的结果(可能使用Fiddler或Wireshark)。您需要确保您希望通过网络传输的数据符合您希望发送的数据。
答案 1 :(得分:1)
M.Babcock肯定让你走在正确的轨道上我想。我几乎没有在.NET领域工作过,所以我可能会对此感兴趣,但是你的testMethod似乎期待一个List类型,实际上你传递的是字符串化的JSON看起来更像是Map。也许你需要改变你的JSON看起来更像这样?
var jsonText = "[{\"ID\":\"dc97d510-cd29-4a23-af7f-36c0acfa1914\",\"AP\":\"201407\",\"EAC\":\"0\"}, {\"ID\":\"anotherId\",\"AP\":\"anotherAP\",\"EAC\":\"etc\"}]";
然后你会出差吗?
答案 2 :(得分:0)
删除contentType属性以使其正常工作