折腾了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"这样的格式,可以用英文的逗号分隔开,但是万一碰到提交数据自带英文逗号的就会出问题,放弃。