Javascript 未将数组对象值添加到ajax调用

Javascript 未将数组对象值添加到ajax调用,javascript,asp.net-mvc-3,jquery,Javascript,Asp.net Mvc 3,Jquery,这里的目标是让MVC框架识别并填充我的操作中的一个字段,该字段是FormCollection对象。如果我自己处理所有的序列化,我就可以让它工作,但如果我把它留给jquery/javascript,到目前为止还没有成功 问题:是什么导致以下数组被序列化,好像它不包含任何数据 我检查了变量,它包含了一个与预期一样的项(在代码的其他地方设置) 这个问题是数组的行为。。。如果我发出警报(formVars)它显示为空,即使它包含所有键/值对。同样,在JSON.stringify()完成其工作后,FormV

这里的目标是让MVC框架识别并填充我的操作中的一个字段,该字段是FormCollection对象。如果我自己处理所有的序列化,我就可以让它工作,但如果我把它留给jquery/javascript,到目前为止还没有成功

问题:是什么导致以下数组被序列化,好像它不包含任何数据

我检查了变量,它包含了一个与预期一样的项(在代码的其他地方设置)

这个问题是数组的行为。。。如果我发出
警报(formVars)它显示为空,即使它包含所有键/值对。同样,在
JSON.stringify()
完成其工作后,FormVariables参数为空

 $.ajax(
            {
                traditional: true,
                type: 'POST',
                contentType: 'application/json',
                dataType: 'json',
                url: gd["Route"],
                data: JSON.stringify(args),
                success: function (data, textStatus, jqXHR)
                {
                },
                error: function (jq, status, err)
                {
                    alert(status);
                }
            });

}
序列化输出:

'{"Req":  
    {
       "SelectedColId":"",
       "CurrentPage":1,
       "PageSize":15,
       "RecordCount":0,
       "NumberOfPages":2,
       "MultipleSelection":false,
       "FormVariables":[]
     }
}'
这里出了什么问题

编辑:gd目录

{
      Height: 300, 
      FetchType: 1, 
      Route: '../GetTrainingDocuments/', 
      SelectedColId: '', 
      PageSize: 15, 
      CurrentPage: 1, 
      RecordCount: 0, 
      HasMoreRecords: true, 
      NumberOfPages: 1, 
      MultipleSelection: false, 
      FormVariables: function() 
      {
          if (this.array == 'undefined') 
          {
             this.array = [];
          } 
          return this.array;
      }
}
它应该绑定到的模型:

public ActionResult GetTrainingDocuments(GridRequest req)
{
   //...
}

public class GridRequest
{
    public string SelectedColId { get; set; }
    public int CurrentPage { get; set; }
    public int PageSize { get; set; }
    public int RecordCount { get; set; }
    public int NumberOfPages { get; set; }
    public string Widths { get; set; }
    public bool MultipleSelection { get; set; }
    public FormCollection FormVariables { get; set; }

    public GridRequest()
    {           
    }
}

您已经将
formVars
变量声明为数组,但此处:
formVars[item.toString()]
您正试图通过某个可能不是整数的值对其进行寻址。javascript中的数组必须具有基于0的整数索引。因此,不是:

formVars[item.toString()] = gd["FormVariables"][item];
如果要使用阵列,则需要:

formVars.push(gd["FormVariables"][item]);
或者,如果要将项目保留为密钥:

formVars.push({ key: item, value: gd["FormVariables"][item] });
如果希望
FormVariables
成为对象(即javascript中的关联数组),则:

这实际上取决于您试图在服务器端绑定的视图模型


更新:

现在,您已经发布了
gd
变量,查看
FormVariables
属性,它看起来非常奇怪:

FormVariables: function() {
    if (this.array == 'undefined') {
        this.array = [];
    } 
    return this.array;
}

这将始终返回一个空数组,这限制了这种结构的实用性。

gd
变量来自哪里?它的内容是什么?@Darin它只是一个存储元数据的关联数组。我也可以提供它所包含内容的转储,尽管我怀疑它是否有用。它需要进一步分析这个问题。@Darin我发布了它的结构。请记住,添加到FormVariables数组的项是在运行时完成的,并且已验证是否包含该值。对,代码的问题是
formVars
数组的索引。它必须是一个从零开始的整数。我会尝试一下,然后很快给你回复。这回答了如何正确处理这个段的问题,但它没有达到在MVC端正确绑定的真正目标。我发布了模型以供查看。我希望FormCollection属性正确包含
gd[“FormVariables”]
@Matthew Cox中找到的所有变量,现在您已经显示了视图模型,我在其中看到了
FormCollection
。这是行不通的,这个类不应该这样使用。我建议您为此使用一些自定义类型。好的,我只需要知道这些。谢谢你的努力!
var formVars = {};
for (var item in gd["FormVariables"])
{
    if (gd["FormVariables"][item] != null)
    {
        formVars[item.toString()] = gd["FormVariables"][item];
    }
}
FormVariables: function() {
    if (this.array == 'undefined') {
        this.array = [];
    } 
    return this.array;
}