首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未添加到ajax调用中的数组对象值

未添加到ajax调用中的数组对象值
EN

Stack Overflow用户
提问于 2011-09-26 18:35:16
回答 1查看 90关注 0票数 0

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

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

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

代码语言:javascript
复制
    var formVars = new Array();
    for (var item in gd["FormVariables"])
    {

        if (gd["FormVariables"][item] != null)
        {

            formVars[item.toString()] = gd["FormVariables"][item];
         }
     }
    var args = {
        Req: {
            SelectedColId: gd["SelectedColId"],
            CurrentPage: gd["CurrentPage"],
            PageSize: gd["PageSize"],
            RecordCount: gd["RecordCount"],
            NumberOfPages: numOfPages,
            MultipleSelection: gd["MultipleSelection"],
            FormVariables: formVars
        }
    };

问题是数组的行为..。如果我做了一个alert(formVars);,它看起来是空的,尽管它包含了所有的键/值对。同样,FormVariables参数在JSON.stringify()完成其工作后为空。

代码语言:javascript
复制
 $.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);
                }
            });

}

序列化输出:

代码语言:javascript
复制
'{"Req":  
    {
       "SelectedColId":"",
       "CurrentPage":1,
       "PageSize":15,
       "RecordCount":0,
       "NumberOfPages":2,
       "MultipleSelection":false,
       "FormVariables":[]
     }
}'

这里出什么问题了?

编辑: gd内容

代码语言:javascript
复制
{
      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;
      }
}

它应当绑定到的模式:

代码语言:javascript
复制
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()
    {           
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-26 18:44:51

您已经将formVars变量声明为数组,在这里:formVars[item.toString()],您正在尝试通过一些可能不是整数的值来处理它。在javascript数组中,必须有基于0的整数索引。因此,与其:

代码语言:javascript
复制
formVars[item.toString()] = gd["FormVariables"][item];

如果要使用数组,则需要:

代码语言:javascript
复制
formVars.push(gd["FormVariables"][item]);

或者,如果您想将该项目保留为密钥:

代码语言:javascript
复制
formVars.push({ key: item, value: gd["FormVariables"][item] });

如果您希望FormVariables是一个对象(即javascript中的关联数组),那么:

代码语言:javascript
复制
var formVars = {};
for (var item in gd["FormVariables"])
{
    if (gd["FormVariables"][item] != null)
    {
        formVars[item.toString()] = gd["FormVariables"][item];
    }
}

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

更新:

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

代码语言:javascript
复制
FormVariables: function() {
    if (this.array == 'undefined') {
        this.array = [];
    } 
    return this.array;
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7559618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档