asp.net MVC接收前端传递的基本数据类型+List<Model>的处理方法

折腾了3天没有搞定,最后参考了这个网页的代码
https://blog.csdn.net/foren_whb/article/details/78893588
弄出来了。折腾了好几天。
前端JS,那个帖子的回复说要改dataType和contenttype之类的,其实都没有必要。

        $(function () {
            $("#submitdata").click(function () {
                var form = $(this).parents('form');
                var i = 0;
                var dt = { 'Quarter': $('#tpid').val(), 'Group': $('#password').val(), 'Streses': [] };
                form.find('tbody tr').each(function () {
                    if ($(this).find("#Stuname").val()) { 
//我开始怎么都搞不定是因为这里没有加判断,读了一行不含数据的tr,在dt.Streses添加了一个空数据,导致post的数组是从1开始,而不是0开始。
                        var thisItem = $(this);
                        dt.Streses.push({
                            'Name': $(this).find("#Stuname").val(),
                            'Level': $(this).find("#Id").val()
                        });
                    }
                });
                $.ajax({
                    url: '/Test/receive',
                    type: "POST",
                    data: dt,
                    cache: false,
                    success: function (data) {
                        alert(data);
                    },
                    error: function () {
                        alert("System Error");
                    }
                });
            })
        })

后台接收代码

        [HttpPost]
        public string receive(StressModel data)
        {
            string str = "";
            str += data.Quarter.ToString() + ":";
            str += data.Group + ":";
            str += (data.Streses.Count + 100).ToString();
            str += data.Streses[0].Name;
            return str;
        }

模型部分基本就是抄那个帖子的。

 public class Stress
    {
        public string Name { get; set; }
        public int Level { get; set; }
    }
    public class StressModel
    {
        public int Quarter { get; set; }
        public string Group { get; set; }
        public List<Stress> Streses { get; set; }
    }

感谢原帖子作者,提供参考代码,才检查出自己代码中的错误。

根据帖子
https://www.cnblogs.com/stream13/archive/2011/11/08/2241209.html
找到了原来自己代码中的bug,table格式如下

<table>
<tr>
<th></th>
<th></th>
</tr>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>

用了.find(‘tbody tr’)选择器结果找到了标题行

<tr>
<th></th>
<th></th>
</tr>

的数据。后将代码改为

<tbody id="dataset">
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>

用了.find(’#dataset tr’)搞定

尝试在提交网页中直接用form进行submit,果然失败了,比较了提交正确的数据和错误的数据,正确的用ajax提交的可以直接绑定的数据

Quarter: 16965
Group: 11111
Streses[0][Name]: 姓名1
Streses[0][Level]: 840289
Streses[1][Name]: 姓名2
Streses[1][Level]: 840367

用form提交的数据格式

Quarter: 16965
Group: 11111
Name: 姓名1
Level: 840289
Name: 姓名2
Level: 840367

两个数据完全不一样,系统无法自动同步到StressModel。
我考虑后台用FormCollection data接收,测试了一下
data[‘Name’]获得的数据是"姓名1,姓名2"这样的格式,可以用英文的逗号分隔开,但是万一碰到提交数据自带英文逗号的就会出问题,放弃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值