Вот мой jQuery, который смотрит на таблицу HTML и получает идентификатор из значения tr и значения ввода и помещает их в объект, который должен быть сжат json и отправлен в контроллер MVC. Я использую jQuery 1.8.2JSON отправлен в MVC Controller is null
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": ""}], [{ "идентификатор": "15", "причина": ""}], [{ "ID": "23", "причина": ""}], [{ "ID": "29", "причина": ""}], [{ "ID": "30", "причина": ""}], [{ "ID": "31", "причина": ""}], [{ "ID":» 35" , "причина": ""}], [{ "ID": "40", "причина": ""}], [{ "ID": "41", "причина": ""}], [{ "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", "причина": ""}], [{» идентификатор ":" 60" , "причина": ""}], [{ "ID": "61", "причина": ""}], [{ "ID": "62", "причина":» "}], [{" ID ":" 63" , "причина": ""}], [{ "ID": "74", "причина": ""}], [{ "ID": "75 », "причина": ""}], [{ "ID": "80", "причина": ""}], [{ "ID": "81", "причина": ""}], [ { "ID": "87", "причина": ""}], [{ "ID": "88", "причина": ""}], [{ "ID": "REA "90" сын ":" "}], [{" ID ":" 91" , "причина": ""}], [{ "ID": "105", "причина": ""}], [{ "ID ":" 106" , "причина": ""}], [{ "ID": "107", "причина": ""}], [{ "ID": "108", "причина": "" }], [{ "ID": "110", "причина": ""}], [{ "ID": "111", "причина": ""}], [{ "ID": "119" , "reason": ""}]]:
Это начало моего контроллера.
[HttpPost]
public ActionResult AbsentReason(string jsonstring)
{
return View("Index");
}
Параметр jsonstring всегда равен нулю. Кто-нибудь может понять, что не так?
UPDATE
Это мой новый контроллер на основе комментариев, чтобы использовать модель и позволяют MVC, чтобы сделать работу для меня.
[HttpPost]
public ActionResult AbsentReason(IEnumerable<VMAttendance> jsonstring)
{
return View("Index");
}
и мой ViewModel
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":""}'
Я обновил свой код выше. – forwheeler