通过ajax </myitem>调用List <myitem>参数的控制器方法

时间:2012-10-29 14:33:28

标签: c# javascript ajax asp.net-mvc

我的c#代码中有这个类:

public class MyItem
    {
        public int LocationId { get; set; }
        public int Value { get; set; }
        public int ddlId { get; set; }
    }

这是我的Js / Ajax代码:

var array = new Array();
grid.forEachRow(function (id) {
        var object = {
            LocationId: id,
            Value: someValue,
            ddlId: otherValue
        };
        array.push(object);
    });

$.ajax({
    type: "POST",
    url: "/MyController/SaveTheList",
    data: { myList: array },
    success:function() { }
 });

这是控制器中的方法:

 [HttpPost]
 public ActionResult SaveTheList(List<MyItem> myList)
 { }

该方法被命中,myList具有确切的长度,但是对象中的所有值都是0.。

3 个答案:

答案 0 :(得分:1)

我建议您使用fiddler(或类似的)检查POST主体中的AJAX请求中发送的数据到底是什么,

东西告诉我

  

data:{myList:array}

看起来像“Object#1,Object#2,Object#3” 因为jQuery将如何尝试序列化你的对象数组

作为解决方案尝试将youj jQuery请求上的数据作为JSON字符串传递,而MVC binder应该能够绑定数据;

答案 1 :(得分:1)

在此之前:

$.ajax({
    type: "POST",
    url: "/MyController/SaveTheList",
    data: { myList: array },
    success:function() { }
 }); 

使用它:

$.ajaxSetup({ traditional:true });

我遇到了同样的问题而且对我有用。

答案 2 :(得分:0)

您可以将其作为JSON请求发送,并且您应该stringify您的数据:

$.ajax({
    type: "POST",
    url: "/MyController/SaveTheList",
    contentType: 'application/json',
    data: JSON.stringify({ myList: array }),
    success: function (result) {

    }
});