これは、HTMLテーブルを見て、trと入力フィールドの値からIDを取得し、それらをオブジェクトに入れてjson文字列化してMVCコントローラーに投稿する私のjQueryです。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","理由":""}],[{"id":"23","理由":""}],[{"id":"29","理由":""}] ,[{"id":"30","理由":""}],[{"id":"31","理由":""}],[{"id":"35"," reason":""}],[{"id":"40","reason":""}],[{"id":"41","reason":""}],[{"id ":"42","理由":""}],[{"id":"48","理由":""}],[{"id":"49","理由":""}],[{"id":"50","理由":""}],[{"id":"51","理由":""}],[{"id":"52" ,"理由":""}],[{"id":"53","理由":""}],[{"id":"54","理由":""}],[{ "id":"55","理由":""}],[{"id":"56","理由":""}],[{"id":"57","理由": ""}],[{"id":"58","理由":""}],[{"id":"59","理由":""}],[{"id":" 60","理由":""}],[{"id":"61","理由":""}],[{"id":"62","理由":""}],[{"id":"63","理由":""}],[{"id":"74","理由":""}],[{"id":"75" ,"理由":""}],[{"id":"80","理由":""}],[{"id":"81","理由":""}],[{ "id":"87","理由":""}],[{"id":"88","理由":""}],[{"id":"90","理由": ""}],[{"id":"91","理由":""}],[{"id":"105","理由":""}],[{"id":" 106","理由":""}],[{"id":"107","理由":""}],[{"id":"108","理由":""}],[{"id":"110","理由":""}],[{"id":"111","理由":""}],[{"id":"119 "、"理由":""}]]:
これが私のコントローラーの始まりです。
[HttpPost]
public ActionResult AbsentReason(string jsonstring)
{
return View("Index");
}
jsonstring パラメータは常に null です。誰が何が間違っているかを見ることができますか?
アップデート
これは、モデルを使用し、MVC が私のために作業できるようにするためのコメントに基づいた新しいコントローラーです。
[HttpPost]
public ActionResult AbsentReason(IEnumerable<VMAttendance> jsonstring)
{
return View("Index");
}
そして私のビューモデル
public class VMAttendance
{
public int PersonID
{
get;
set;
}
public string Reason
{
get;
set;
}
}
パラメータはまだヌルです。また、正しいjsonを送信するためにjQueryを更新します。
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をコントローラーに送信しようとしましたが、パラメーターはまだnullです。
var data = '{"PersonID":"6","Reason":""},{"PersonID":"7","Reason":""}'