这是我的 jQuery,它查看一个 HTML 表并从 tr 和一个输入字段值中获取一个 id,并将它们放入一个对象中,以进行 json 字符串化并发布到 MVC 控制器。我正在使用 jQuery 1.8.2
var rowdata = [];
$('table').find('tr').each(function () {
myjson = [];
item = {}
item["id"] = $(this).attr('id');
item["reason"] = $(this).find('input').val();
myjson.push(item);
rowdata.push(myjson);
});
jsonstring = JSON.stringify(rowdata);
$.ajax({
url: '@Url.Action("AbsentReason", "Attendance")',
data: jsonstring,
type: 'POST',
traditional: true,
contentType: 'json',
success: function (data) {
$('#message').html("Reason was updated");
}
});
这是检查有效的结果 JSON。
[[{}],[{"id":"6","reason":""}],[{"id":"7","reason":""}],[{"id": "15","reason":""}],[{"id":"23","reason":""}],[{"id":"29","reason":""}] ,[{"id":"30","reason":""}],[{"id":"31","reason":""}],[{"id":"35","原因":""}],[{"id":"40","reason":""}],[{"id":"41","reason":""}],[{"id ":"42","reason":""}],[{"id":"48","reason":""}],[{"id":"49","reason":""}],[{"id":"50","reason":""}],[{"id":"51","reason":""}],[{"id":"52" ,"reason":""}],[{"id":"53","reason":""}],[{"id":"54","reason":""}],[{ "id":"55","reason":""}],[{"id":"56","reason":""}],[{"id":"57","reason": ""}],[{"id":"58","reason":""}],[{"id":"59","reason":""}],[{"id":" 60","reason":""}],[{"id":"61","reason":""}],[{"id":"62","reason":""}],[{"id":"63","reason":""}],[{"id":"74","reason":""}],[{"id":"75" ,"reason":""}],[{"id":"80","reason":""}],[{"id":"81","reason":""}],[{ "id":"87","reason":""}],[{"id":"88","reason":""}],[{"id":"90","reason": ""}],[{"id":"91","reason":""}],[{"id":"105","reason":""}],[{"id":" 106","reason":""}],[{"id":"107","reason":""}],[{"id":"108","reason":""}],[{"id":"110","reason":""}],[{"id":"111","reason":""}],[{"id":"119 “,“原因”:””}]]:
这是我的控制器的开始。
[HttpPost]
public ActionResult AbsentReason(string jsonstring)
{
return View("Index");
}
jsonstring 参数始终为空。任何人都可以看到有什么问题吗?
更新
这是我根据评论使用模型并允许 MVC 为我完成工作的新控制器。
[HttpPost]
public ActionResult AbsentReason(IEnumerable<VMAttendance> jsonstring)
{
return View("Index");
}
和我的视图模型
public class VMAttendance
{
public int PersonID
{
get;
set;
}
public string Reason
{
get;
set;
}
}
该参数仍然为空。我还更新了我的 jQuery 以尝试发送正确的 json。
var data = $('table').find('tr').map(function () {
var id = $(this).attr('id');
var reason = $(this).find('input').val();
var rowdata = { "PersonID": id, "Reason": reason };
return rowdata;
}).get();
$.ajax({
url: '@Url.Action("AbsentReason", "Attendance")',
data: data,
type: 'POST',
traditional: true,
contentType: 'json',
success: function (data) {
$('#message').html("Reason was updated");
}
});
我试图向控制器发送一些测试 json,但参数仍然为空。
var data = '{"PersonID":"6","Reason":""},{"PersonID":"7","Reason":""}'