我的控制器如下:
[HttpPost]
public JsonResult getCartFromClient(List<JSItem> data)
{
return view();
}
和我的JS代码发送Json如下:
var list = JSON.parse(localStorage.getItem('cart'));
$.ajax({
url: "CheckOut/getCartFromClient/",
contentType: "application/json",
dataType: 'json',
type: "POST",
data: JSON.stringify(list)
});
现在的问题是,当调用conttroller时,数据将包含数组中正确数量的项,但每个JSItem的内容为null,Id为null,名称为null ..!?
不确定导致此问题的原因!我在列表中获得了正确数量的对象,但内容为空?
ViewModel如下:
public class JSItem
{
public string xid { get; set; }
public string xamount { get; set; }
public string xprice { get; set; }
public string xname { get; set; }
public string xlevel { get; set; }
//public string ximg { get; set; }
}
public class Rootobject
{
public JSItem JSItem { get; set; }
}
Json.stringify(list)将带来以下json文件:
"[{"JSItem":{"xid":"2","xamount":"1","xprice":"50.00","xname":"BaBy Product 1","xlevel":"0"}},{"JSItem":{"xid":"3","xamount":"1","xprice":"0.00","xname":"BaBy Product 122","xlevel":"0"}}]"
答案 0 :(得分:1)
您的JSON数据似乎比JSItem高一级。
将控制器操作更改为RootObject,然后查看。
[HttpPost]
public JsonResult getCartFromClient(List<RootObject> data)
{
return view();
}
如果您不想这样做,请按照Stephen Muecke在评论中的建议发送JSOn,以便将其反序列化为List<JSItem>
至于为什么你看到List<JSItem>
的正确计数,但所有空值,原因是:
当MVC尝试将此值反序列化为List<JSItem>
"[
{
"JSItem":{"xid":"2","xamount":"1","xprice":"50.00","xname":"BaBy Product 1","xlevel":"0"}
},
{
"JSItem":{"xid":"3","xamount":"1","xprice":"0.00","xname":"BaBy Product 122","xlevel":"0"}
}
]"
MVC能够识别输入是具有计数2的元素数组。
所以它用2个元素初始化List<JSItem>
。并且它开始为每个项目新建JSItem
,作为模型绑定的一部分。
但是,当它尝试设置此新建的JSItem
的属性时,它在JSON中找不到任何匹配的字段。这是因为您的JSON比JSItem
高一级。因此所有字段都为空。