使用$ http或$ .ajax将对象数组发送到MVC4控制器

时间:2013-06-27 21:22:44

标签: jquery asp.net-mvc-4 angularjs

显然我做错了什么,试过一切。

最初我需要使用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值都为空

3 个答案:

答案 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'}]
    }
)