显然我做错了什么,试过一切。
最初我需要使用angular的$ http将对象数组发送到asp.net mvc控制器,但是它没有用。
然后我尝试使用jquery。我尝试过使用不同参数的$.get
,$.post
,$.ajax
方法(传统的,非传统的,dataType:'json'
,没有它 - 仍然无法传递值。这件事让我伤心。
$.ajax(
url: '/Home/Foo'
data: items: [{'name':'some'},{'name':'other'}])
public JsonResult Foo(Item[] items)
{
return Json(items, JsonRequestBehavior.AllowGet);
}
public class Item
{
public string name { get; set; }
}
我能从中得到最好的东西 - 它将项目识别为Item []数组,但每个name
值都为空
答案 0 :(得分:1)
根据这篇文章
http://encosia.com/asmx-scriptservice-mistake-invalid-json-primitive/
它应该是一个字符串:
$.ajax(
url: '/Home/Foo'
data: "{ 'items': [{'name':'some'},{'name':'other'}] }"
现在使用JSON.stringify可以解决我的问题。仍然要尝试使用$ http
答案 1 :(得分:1)
将JSON字符串传递给MVC时,请务必设置内容类型application/json
。否则,MVC将期望URLEncoded格式的数据而不是JSON。
JSON通常最适合传入数组,所以你应该走在正确的道路上。
答案 2 :(得分:1)
您的data
字符串(即data: items: [{'name':'some'},{'name':'other'}]
)是无效的JSON语法,而您自我答案中的字符串化JSON字符串语法正确。
您不必将对象转换为JSON字符串,标准Javascript对象应该有效。
尝试将其切换为:
$.ajax(
url: '/Home/Foo',
data: {
'items': [{'name':'some'},{'name':'other'}]
}
)