如何使用JQuery将javascript数组传递给Controller操作?

时间:2013-05-07 08:51:40

标签: jquery ajax asp.net-mvc

我在Razor视图中有一个javascript数组,我使用$ .ajax从我的MVC视图调用控制器的GET操作。什么应该是接受从视图传递的Javascript数组的Controller操作的参数类型。 我试图将它保持为“对象”,但它只显示为“[对象]”并且根本没有显示任何属性。 知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:3)

完全取决于数组中类型的值

比如说,如果你有一个整数数组,就像这样:

var intArray = [1,2,3,4]

然后,在你的控制器中,你有一个List<int>作为参数类型,控制器很聪明,可以为你找出转换。

然而,如果你想要一些更高级的东西,我猜你就是这样,例如:

var customArray = [{hello: "world", foo: "bar"}]

然后最好在.NET中创建一个自定义对象,其中hellofoo作为属性,例如:

public CustomObject {
   public string hello { get; set; }
   public string foo { get; set; }
}

然后您可以使用CustomObjectList<CustomObject>作为参数类型,Controller会为您映射属性...就像魔法一样。

答案 1 :(得分:3)

只需将其传递给ajax并添加traditional: true,

即可
var ids = [0,1,2,3];

$.ajax({
   url: '@Url.Action("SomeAction", "Home")',
   type: 'POST',
   traditional: true,
   data: { array: ids },
   ...

控制器

public ActionResult SomeAction(int[] array){}

对象对象

var objs = JSON.stringify(your_objects);

$.ajax({
   url: '@Url.Action("SomeAction", "Home")',
   type: 'POST',
   data: { array: objs },
   ...

控制器

public ActionResult SomeAction(List<YourObjectType> array){}

检查HERE