我正在开发一个同时使用 jQuery Mobile 和 MVC3 后端的项目。在其中一个页面上,要求用户从几个下拉菜单中选择选项或将它们保留为默认值。该页面采用选定的选项并将它们放入一个对象中,然后将其发送到服务器以加载下一页数据。我尝试了两种不同的方法,两种方法都给出了相同的错误。主对象正确序列化和反序列化,但内部数组没有。该数组具有正确数量的元素,但其中没有数据。我像这样创建对象:
var obj = { };
obj.selections = new Array();
// customArr holds the data from the select lists and populates fine
$.each(customArr, function(key, value)
{
if(value== undefined)
return true;
obj.selections.push({
type: value.id,
subtype: value.subtype,
model: value.model
});
}
// Selected comes from data that was previously gathered
if(selected != undefined)
{
obj.mk = selected.mk;
obj.md = selected.md;
obj.yr = selected.yr;
}
obj.id = selectionID;
我尝试了两种获取数据的方法。我试图直接移动页面:
$.mobile.changePage('/Select/Data/', { data: obj });
我已经尝试在没有任何数据的情况下加载上述页面(仅使用超链接上的 jQuery Mobile 数据属性),然后使用以下命令对数据进行 ajax 输出:
$.ajax({
url: '/Select/Data/',
data: obj,
type: 'POST',
datatype: 'json',
error: function() { // Handle error },
success: function(response) {
// Load data
}
});
如果我在服务器代码中设置断点,我可以查看返回的对象。mk、md 和 yr 属性已填充,且 selections 数组有两个对象,但类型、子类型和模型数据为空。但是,如果我单步执行 JavaScript 代码,它就会完全按照我的预期创建。发送到服务器的 POST 变量甚至看起来是正确的。有什么建议么?
编辑: C# 对象如下所示:
public class ObjectModel
{
public int mk;
public int md;
public int yr;
public List<Mod> selections;
}
public class Mod
{
public int type;
public int subtype;
public string model;
}
控制器方法如下所示:
public ActionResult Data(ObjectModel objMod, int id = -1)