将Javascript对象数组传递给PageMethod

时间:2009-05-16 04:40:47

标签: asp.net javascript pagemethods

以下是这种情况:我想迭代一个带有输入控件的表,收集值然后将它们提交给ASP.Net PageMethod以将数据保存到数据库中。我有所有的集合,但我得到一个错误,该字符串无法转换为字典。

所以我最终将这样的内容传递给具有以下签名的方法

[
{ 'id': '383840923', 'name': 'fred', 'car':'honda' },
{ 'id': '243', 'name': 'joe', 'car':'honda' },
{ 'id': '4323423', 'name': 'paul', 'car':'honda' },
{ 'id': '38384234230923', 'name': 'ted', 'car':'honda' },
]

public static bool SaveData(Dictionary<string, object>[] items) {...}

我知道如果正确声明我可以来回传递全类对象,ASP.Net将为我处理转换,但我不需要传递整个类,只需要几个属性。

编辑:我正在使用Jquery将帖子发回服务器。

我在这里做错了什么?

3 个答案:

答案 0 :(得分:2)

ASP.NET AJAX will automatically deserialize that for you if you use a DTO。服务器端的这类内容与您发送的JSON数组匹配:

public class PeopleAndCarsDTO
{
  public int id { get; set; }
  public string name { get; set; }
  public string car { get; set; }
}

public static bool SaveData(List<PeopleAndCarsDTO> items) {...}

答案 1 :(得分:1)

我弄清楚问题是什么。我在将数组作为$ .ajax调用的一部分发送之前将数据包装在引号中,因此它被视为字符串而不是数组。

            $.ajax({
                type: "POST",
                url: "<%= Response.ApplyAppPathModifier(Request.Path) %>/UpdateAcademicItems",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: "{'items': **'**" + $.toJSON(items) + "**'**}",
                success: function(data) {
                    if(false != data.d) {
                        alert('we did it');
                    } else {
                        alert ('flop');
                    }
                },
                error: function() {
                    alert('Failed to save Program Items');
                }
            }); 

答案 2 :(得分:0)

@Jared传递的对象是一个JSON数组。您可以使用json sharp在服务器端处理它。 Here是关于将json数组转换为C#的好文章。