3

情况如下:我想遍历带有输入控件的表,收集值,然后将它们提交到 ASP.NETPageMethod以将数据保存到数据库中。我已经弄清楚了所有集合,但收到一个错误,即字符串无法转换为Dictionary<string, object>.

所以我最终得到这样的东西被传递给具有以下签名的方法

[
{ '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 将帖子发送回服务器。

我在这里做错了什么?

4

3 回答 3

2

如果您使用 DTO,ASP.NET AJAX 将自动为您反序列化。服务器端的类似内容将匹配您发送的 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) {...}
于 2009-05-16T04:59:19.460 回答
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');
    }
}); 
于 2009-05-16T05:14:46.317 回答
0

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

于 2009-05-16T04:54:13.200 回答