我有 2 个类,用于镜像 ajax 调用中的数据。一个(客户)包含名称属性,另一个是产品数组。
Public Class Customer
Private _Name as String
Private _Products as Product()
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Public Property Products() As Product()
Get
Return _Products
End Get
Set(ByVal value As Product())
_Products= value
End Set
End Property
和 ajax 调用:
$.ajax({
url: '../../Customer/SaveCustomerData',
type: "POST",
dataType: "json",
data: { "Name": this.Name,
"Products": [{ "ProductCode": "product 1", "ProductName": "product 1" },
{ "ProductCode": "product 2", "ProductName": "product 2"}]
},
success: function(data) {
alert("Customer has been saved!");
}
});
反射(reflect)了 Customer.Name 的值,但产品的属性保持不变,同时长度仍为 2。
我在这里错过了一些真正重要的东西吗?
最佳答案
现在您没有传递 JSON,而是按原样传递数据(用 $.param()
序列化)...看起来像这样:
Name=something&Products%5B0%5D%5BProductCode%5D=product+1&Products%5B0%5D%5BProductName%5D=product+1&Products%5B1%5D%5BProductCode%5D=product+2&Products%5B1%5D%5BProductName%5D=product+2
要传递 JSON,您需要对其进行字符串化,如下所示:
data: JSON.stringify({ "Name": this.Name,
"Products": [{ "ProductCode": "product 1", "ProductName": "product 1" },
{ "ProductCode": "product 2", "ProductName": "product 2"}]
}),
看起来像这样:
{"Name":"something","Products":[{"ProductCode":"product 1","ProductName":"product 1"},{"ProductCode":"product 2","ProductName":"product 2"}]}
现在这就是您的模型可以将其转回对象的东西。对于不支持 native JSON
的旧版浏览器 (< IE8),include json2.js
这将模拟行为。
关于asp.net - 将复杂的 JSON 数据 jQuery 传递给 Action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4322359/