Передача массива сложных объектов из вида в контроллер с помощью Ajax - PullRequest
1 голос
/ 21 июня 2019

В контроллере мне нужно получить два параметра (подробный и тестовый), один - список пользовательских объектов, другой - строку, я могу два передать только один параметр (список объектов), когда передать обаЯ получаю нулевые значения в контроллере.

Результирующий Json к контроллеру:

[{
    "detail": [{
        "tag": "PIC330_620%2F_.PV_Out%23Value",
        "color": "%2331c63e"
    }, {
        "tag": "A330_10%2F_.FbkFwdOut%23Value",
        "color": "%238edeed"
    }, {
        "tag": "TIC330_603%2F_.PV_Out%23Value",
        "color": "%23e8ea62"
    }, {
        "tag": "TI330_600%2F_.PV_Out%23Value",
        "color": "%23f7cbb4"
    }, {
        "tag": "TIC311_602%2F_.MV%23Value",
        "color": "%23ef935d"
    }, {
        "tag": "TIC311_602%2F_.PV_Out%23Value",
        "color": "%23f28a9b"
    }, {
        "tag": "TIC310_600%2F_.MV%23Value",
        "color": "%2385f968"
    }, {
        "tag": "TIC310_605%2F_.PV_Out%23Value",
        "color": "%2308d687"
    }],
    "test": "lolo"
}]
//Generate list of objects
function getViewDetail() {
        var details = [];
        var tag;
        var color;
        var detail;
        $('.tagContainer').each(function (i, obj) {
            tag = $(this).find('.tag_label').text();
            color = $(this).children('.colorpicker').val();
            detail = { tag: encodeURIComponent(tag), color: encodeURIComponent(color) };
            details.push(detail);

        });  
        return details;

    }
// Call Ajax
function sendParameters(){
    var details = getViewDetail();
                        var list = [];
                        list.push({ detail: details, test: 'lolo' });
                        list = JSON.stringify(list);
                            console.log(list);
                        jQuery.ajax({
                            url: '@Url.Action("SaveView", "Batch")',
                            async: false,
                            data: list,
                            contentType: 'application/json',
                            dataType: 'json',
                            type: 'POST',
                            success: function (result) {
                                if (!result.success) {
                                    showErrorMessage(result.title, result.message);
                                }
                                else {
                                    showSuccessMessage(result.title, result.message);
                                }
                            }
                        });
}

//In the controller (abbreviated)
public JsonResult SaveView(IEnumerable<Detail> detail, string test)
        {}

//class
public class Detail
    {
        string _tag;
        string _color;

        public string tag { get => _tag; set => _tag = value; }
        public string color { get => _color; set => _color = value; }
    }

1 Ответ

1 голос
/ 21 июня 2019

Попробуйте:

data = { detail: details, test: 'lolo' };
data = JSON.stringify(data);

И отправьте его через ajax:

data: data,

В подписи вашего действия ожидаются два параметра, detail и test.То, что вы передавали, было списком объектов с двумя свойствами detail и test.Есть разница?Короче говоря, ваш объект публикации должен выглядеть так:

{
    "detail": [...],
    "test": "lolo"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...