这里的目标是让MVC框架识别并填充我的操作中的一个字段,即FormCollection对象。如果我自己处理所有的序列化,我就可以让它工作,但到目前为止,如果把它留给jquery/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()完成其工作后为空。
$.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()
{
}
}发布于 2011-09-26 18:44:51
您已经将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中的关联数组),那么:
var formVars = {};
for (var item in gd["FormVariables"])
{
if (gd["FormVariables"][item] != null)
{
formVars[item.toString()] = gd["FormVariables"][item];
}
}这实际上取决于您试图在服务器端绑定的视图模型。
更新:
现在您已经发布了gd变量,查看了FormVariables属性,它看起来非常奇怪:
FormVariables: function() {
if (this.array == 'undefined') {
this.array = [];
}
return this.array;
}这将始终返回一个空数组,这限制了这种结构的有用性。
https://stackoverflow.com/questions/7559618
复制相似问题