核心代码是这样的
$("#submitButton").click(function () {
var B720 = [];
var snm = "";
var str = "";
var ctry = "";
$("#B720 tbody tr").each(function (i, n) {
$(n).children("td").each(function (c, d) {
if (c != 3) {
if (c == 0) {
snm = $(d).children("input['text']").val();
}
else if (c == 1) {
str = $(d).children("input['text']").val();
}
else if (c == 2) {
ctry = $(d).children("input['text']").val();
}
}
});
B720.push({ 'snm': snm, 'str': str, 'ctry': ctry });
});
B720 = eval(B720);
var B730 = [];
$("#B730 tbody tr").each(function (i, n) {
$(n).children("td").each(function (c, d) {
if (c != 3) {
if (c == 0) {
snm = $(d).children("input['text']").val();
}
else if (c == 1) {
str = $(d).children("input['text']").val();
}
else if (c == 2) {
ctry = $(d).children("input['text']").val();
}
}
});
B730.push({ "snm": snm, "str": str, "ctry": ctry });
});
var B740 = [];
$("#B740 tbody tr").each(function (i, n) {
$(n).children("td").each(function (c, d) {
if (c != 3) {
if (c == 0) {
snm = $(d).children("input['text']").val();
}
}
});
B740.push({ "snm": snm });
});
var B700 = {
"B720": B720,
"B730": B730,
"B740": eval(B740)
};
$.post("Home/GetObject", B700, function (response) {
});
});
});
页面跟踪出来组装的对象也有值:
但是后台取对象的时候LIST都取到了,就是下面单个值的时候都是null
对象是这样定义的。
好了,为什么后台一直取不到值呢。
用火狐的firebug看看 post的 参数
B720[0][ctry] | |
B720[0][snm] | |
B720[0][str] |
@IT_小小鸟:
这个 参数 应该有问题,.[ctry] 前面应该要有个点, 传json字符串到后台序列化对象。
@Qlin: 刚刚稍微修改了下
现在POST数据是这样的
B720[0][ctry] US B720[0][snm] ROBERT A. SANDERSON B720[0][str] 63 WEST HIDDEN VALLEY AIRPARK B720[1][ctry] US B720[1][snm] ALBERT E. SANDERSON B720[1][str] 70 FOREST PARK DRIVE B730[0][ctry] US B730[0][snm] R. SANDERSON MANAGEMENT, INC. B730[0][str] 63 WEST HIDDEN VALLEY AIRPARK B740[0][snm] CAROLINE FRANCIS
但是后台序列化之后取到的还是null。纠结。。
@IT_小小鸟:
你的 post的键有问题,当然不行
B720[0].[ctry] 要这样,要不就把你的var B700 转换成字符串,再 在后台把字符串序列化成对象
@Qlin: 问题解决了,分享下,呵呵,我是做JSON字符串传到后面,然后在反序列化的。
public void GetObject(string B700) { JavaScriptSerializer jss = new JavaScriptSerializer(); //string a= jss.Serialize(B700); B700 AA = jss.Deserialize<B700>(B700); //JsonResult jr = Json(B700); }
虽然感觉没有直接传对象方便。但是效果达到了,谢谢那些好的思路。小菜继续前行喽,哈哈...
用游览器的开发者工具(chrome)看看你提交的ajax请求,传递的数据对吗?
我用火狐的firebug看了。数据就是第一个图片啊 。
@IT_小小鸟: 看下你action中的代码时如何写的
@chenping2008:
//[HttpPost] public void GetObject(B700 B700) { JsonResult jr = Json(B700); }
@IT_小小鸟: 你用javascriptserizller来反序列化JSON试试
@chenping2008: 是这样赋值吗?
$("#B720 tbody tr").each(function (i, n) { $(n).children("td").each(function (c, d) { if (c != 3) { if (c == 0) { snm = $(d).children("input['text']").serialize(); } else if (c == 1) { str = $(d).children("input['text']").serialize(); } else if (c == 2) { ctry = $(d).children("input['text']").serialize(); } } }); B720.push({ 'snm': snm, 'str': str, 'ctry': ctry }); });
貌似还是取不到,哎。。
你传递的这个参数是hash对象吧……这应该是不可以的,因为ajax在传递参数的时候,会把data转为字符串形式,你需要把hash对象序列化,再传递过去……
请问该怎么做呢,Jquey每次赋值的时候都用serialize
序列化一次吗?
@IT_小小鸟: 我是想把要传递的参数组合成为字符串,传递过去,再拆开……似乎办法有点笨,不过我们就是这么做的,有高手请指点……