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