C#-Jquery:将常规参数和带有$ .post的list <keypairvalue <string,string =“” >>从视图传递到控制器

时间:2019-03-22 21:12:16

标签: c# ajax asp.net-mvc-4

我尝试将ajax调用($ .post)中的“常规”参数类型从视图传递给应该接收这些参数以及List>的控制器。

我需要此列表,因为这些参数将与model.types不同,并且控制器中的方法将开关案例中的所有参数分配给私有方法。

我尝试了几个jquery对象构建,JSON.stringify,在字符串中带有索引的数组(我知道我无法明确命名列...这是我的问题的一部分),该字符串始终以List结尾,在后端方法。

“参数”在xhr调试中可见,但是参数_options始终为空(引用控制器方法)。

这是我的var和ajax调用:

(Library[] objArray, Library inputlib)
Firefox调试器中的

xhd参数:

 function initDocumentsPreviewsActions() {
        $('.documents-list-preview-action').on('click', function () {

            if (xhrPreviewLoad != undefined)
                xhrPreviewLoad.abort();

            $('#documents-preview').html('<div class="general-form-message-loader"></div>');
            documentCurrentIndex = $(this).data('btnindex');
            setDatatableRowActive();

            var documentType = $(this).data('documenttype');
            var adherentRessourceId = $(this).data('adherentressourceid');
            var annee = $(this).data('annee');
            var echeancier = $(this).data('echeancier');
            var destinataireid = $(this).data('destinataireid');
            var destinatairetypeid = $(this).data('destinatairetypeid');
            var emetteurid = $(this).data('emetteurid');
            var emetteurmandatid = $(this).data('emetteurmandatid');
            var trimestres = $(this).data('trimestres');
            var params = [
                { '_annee': '' + annee + '', '_echeancier': '' + echeancier + '', '_trimestres': '' + trimestres + '' }
            ];

xhrPreviewLoad = $.ajax({
                url: '/Documents/PreviewDocumentSingle',
                data: {
                    _documentType: documentType,
                    _adherentRessourceId: adherentRessourceId,
                    _annee: annee,
                    _destinataireId: destinataireid,
                    _destinataireType: destinatairetypeid,
                    _emetteurId: emetteurid,
                    _emetteurMandatId: emetteurmandatid,
                    _echeancier: echeancier,
                    _options: JSON.stringify(params)
                },
                dataType: 'json',
                type: 'POST'
            }).done(function (documentPartialView) {
                $('#documents-preview').html('<img src="' + documentPartialView.src + '"/>');
                xhrPreviewLoad = undefined;
            });
        });
}

控制器方法:

_documentType   AppelCotisation
_adherentRessourceId    836
_annee  2018
_destinataireId 11
_destinataireType   Syndicat
_emetteurId 16289
_emetteurMandatId   5986
_echeancier False
_options    [{"_annee":"2018","_echeancier":"False","_trimestres":"undefined"}]

很久以前我已经做过,但是我不能把手或大脑放在上面。我敢肯定这是小事。

我希望正确获取所有参数,或者建议在后端(以及如何在前面将其形式化)声明另一个不同类型的List或Array ...好吧……任何帮助都来了

但是我真的很想将音乐保持在后端。

1 个答案:

答案 0 :(得分:0)

我终于发现自己如何通过在控制器的方法参数中更改为Dictionnaray而不是List>来解决此简单问题,并构建一个像这样的简单js对象:

        var options = {};
        options['_annee'] = annee;
        options['_echeancier'] = echeancier;
        options['_trimestres'] = trimestres;