Отправка массива объектов через 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... 
}