首页 新闻 搜索 专区 学院

mvc2 view向Controller传对象的问题

0
悬赏园豆:30 [已解决问题] 解决于 2012-10-26 15:23

核心代码是这样的

$("#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

对象是这样定义的。

好了,为什么后台一直取不到值呢。

IT_小小鸟的主页 IT_小小鸟 | 初学一级 | 园豆:150
提问于:2012-10-26 13:16
< >
分享
最佳答案
0

 用火狐的firebug看看 post的 参数

收获园豆:20
Qlin | 老鸟四级 |园豆:2403 | 2012-10-26 14:01
B720[0][ctry]  
B720[0][snm]  
B720[0][str]
IT_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 14:07

@IT_小小鸟: 

这个 参数 应该有问题,.[ctry] 前面应该要有个点, 传json字符串到后台序列化对象。

Qlin | 园豆:2403 (老鸟四级) | 2012-10-26 14:12

@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_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 14:20

@IT_小小鸟: 

你的 post的键有问题,当然不行

B720[0].[ctry] 要这样,要不就把你的var B700 转换成字符串,再 在后台把字符串序列化成对象

Qlin | 园豆:2403 (老鸟四级) | 2012-10-26 14:23

@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);
        }

虽然感觉没有直接传对象方便。但是效果达到了,谢谢那些好的思路。小菜继续前行喽,哈哈...

IT_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 15:23
其他回答(2)
0

用游览器的开发者工具(chrome)看看你提交的ajax请求,传递的数据对吗?

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-10-26 13:30

 我用火狐的firebug看了。数据就是第一个图片啊 。

支持(0) 反对(0) IT_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 13:31

@IT_小小鸟: 看下你action中的代码时如何写的

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-10-26 13:34

@chenping2008: 

//[HttpPost]
        public void GetObject(B700 B700)
        {
            JsonResult jr = Json(B700);
        }
支持(0) 反对(0) IT_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 13:36

@IT_小小鸟: 你用javascriptserizller来反序列化JSON试试

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-10-26 13:49

@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 });
                });

 貌似还是取不到,哎。。

支持(0) 反对(0) IT_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 14:11
0

你传递的这个参数是hash对象吧……这应该是不可以的,因为ajax在传递参数的时候,会把data转为字符串形式,你需要把hash对象序列化,再传递过去……

收获园豆:5
ms_water | 园豆:510 (小虾三级) | 2012-10-26 14:00

 请问该怎么做呢,Jquey每次赋值的时候都用serialize序列化一次吗?

支持(0) 反对(0) IT_小小鸟 | 园豆:150 (初学一级) | 2012-10-26 14:02

@IT_小小鸟: 我是想把要传递的参数组合成为字符串,传递过去,再拆开……似乎办法有点笨,不过我们就是这么做的,有高手请指点……

支持(0) 反对(0) ms_water | 园豆:510 (小虾三级) | 2012-10-26 14:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册