Отправка массива объектов через AJAX - ASP.NET MVC
Итак, получив объекты, которые мне нужны в JS, я сделал:
$('.combine-payment-input').each(function (index, value) {
if (parseFloat(value.value) > 0) {
if (methodOfPayment == -1) {
methodOfPayment = value.dataset.method;
}
else {
methodOfPayment = 0;
}
vmopl.push({
id: value.dataset.method,
name: $('label[for="' + value.id + '"]').html(),
inUse: 'True',
ammount: value.value
});
}
});
Если Я console.log
vmopl
в конце концов, я получу что-то вроде
[Object { id="2", name="Card", inUse="True", ammount="500"},
Object { id="1", name="Cash", inUse="True", ammount="250"}]
теперь, если я попытаюсь отправить это в AJAX, используя
$.get('/reports/savebill/' + methodOfPayment + '?vmop=' + JSON.stringify(vmopl), function (data) {
if (data == 'True') {
location.href = '/order/neworder/';
} else {
alert("Unsuccessful!");
}
});
действие контроллера должны выберите vmop
контроллер выглядит так:
public bool SaveBill(int id, ViewMethodOfPayment[] vmop) {
//lots of code...
}
но когда я ставлю точку останова, я всегда вижу vmop
как null, даже когда я передаю его другому объекту (var temp = vmop;
).
ViewMethodOfPayment
- это простой класс модели:
public class ViewMethodOfPayment
{
public long Id { get; set; }
public string Name { get; set; }
public bool InUse { get; set; }
public double Ammount { get; set; }
}
если я пропустил какую-либо информацию, или если неясно, что я хочу сделать/ожидать, пожалуйста, оставьте комментарий, я отвечу, как только смогу!
Спасибо за чтение!
edit: изменен первый блок кода (строка: 9, потому что я включил код, который приведет к ошибке JavaScript)
2 ответов
что я в настоящее время использую:
Javascript отправляет данные через JSON.stringify, как и вы.
C#:
public ActionResult AjaxDoSomething(string vmop)
{
var jss = new JavaScriptSerializer();
try
{
var parameter = jss.Deserialize<ViewMethodOfPayment []>(vmop);
//Do something with this data and return the desired result
return Json(result, JsonRequestBehavior.AllowGet);
}
catch
{
return null;
}
}
попробуйте поставить [FromUri] перед ViewMethodOfPayment [] vmop, как показано ниже
public bool SaveBill(int id,[FromUri] ViewMethodOfPayment[] vmop) {
//lots of code...
}