使用$ .redirectPost()MVC将列表<class>从js发送到控制器

时间:2017-10-03 16:11:19

标签: javascript c# jquery asp.net-mvc

正如标题所说,我需要从.js文件向MVC控制器发送一些值,其中一个值是对应于List&lt;&gt;的对象数组。在控制器中,问题是当到达控制器时列表计数为0,这是我的代码:

在.js:

var listaParametros = [
               { "Identificador": "1", "Tipo": "MG", "Texto": "Escala de calificación", "Valor": "/EscalaCalificacion/Listado", "IdRetorno": identificadorRetorno, "RecuerdaFiltros": recuerdaFiltros }
    ];

    var maestroEscalaCalificacionE =
        {
            IdentificadorMaestroEscalaCalificacion: $('#grid-tableEscalaCalificacion').jqGrid('getRowData', elementoSeleccionado).IdentificadorMaestroEscalaCalificacion,
            IndicadorActivo: $('#ddlIndicadorActivo').val(),
            ListaParametros: listaParametros
        };

    $.redirectPost(window.rootUrl + "/EscalaCalificacion/Consultar", maestroEscalaCalificacionE);

Controller上的ActionResult:

[HttpPost] 
public ActionResult Consultar(EscalaCalificacionMaestroE maestroEscalaCalificacionE)

List是EscalaCalificacionMaestroE类的公共属性。

顺便说一句,我使用$ .redirectPost()因为我需要在ActionResult完成时转到另一个页面。

[UPDATE] 这是函数redirectPost()

redirectPost: function (location, args) {
            var form = '';

            var jForm = $('<form></form>', {
                action: location,
                method: 'post'
            });

            $.each(args, function (key, value) {
                $("<input>", {
                    name: key,
                    value: value,
                    type: 'hidden'
                }).appendTo(jForm);
            });

            jForm.appendTo('body').submit();
        }

现在,当我使用$ .ajax时,所有内容都像魅力一样,但不知道如何获取新页面,有关获取新页面的任何帮助吗?

1 个答案:

答案 0 :(得分:0)

感谢大家,你的想法帮助我解决它,项目的架构,有一些我不能使用的东西,但混合思路我用以下方式解决了它(我知道它不是在安全实践方面最好,但我无法改变它:)

我创建了一个类似于redirectPost()的函数,称为“重定向”,但它允许我使用以下格式为列表中的每个值创建一个HTML输入:

键:列出[0] [PropertyName]

value:parameterValue

然后当提交执行时,控制器上的“List”具有正确的值。

再次感谢大家!

顺便说一句,这是代码,也许有人可以需要它!

function Redirection(location, args) {
    var form = '';
    var jForm = $('<form></form>', {
        action: location,
        method: 'post'
    });
    iterateValues(args, [], jForm, null, false)
    jForm.appendTo('body').submit();
}

function getInput(name, value, parent, isArray, isTraditionalArray) {
    var parentString;
    if (parent.length > 0) {
        parentString = parent[0];
        var i;
        for (i = 1; i < parent.length; i += 1) {
            parentString += "[" + parent[i] + "]";
        }
        if (isArray) {
            if (isTraditionalArray)
                name = parentString;
            else
                name = parentString + "[" + name + "]";
        } else {
            name = parentString + "[" + name + "]";
        }
    }
    return $("<input>").attr("type", "hidden")
        .attr("name", name)
        .attr("value", value);
};
function iterateValues(values, parent, form, isArray,  isTraditionalArray) {
    var i, iterateParent = [];
     Object.keys(values).forEach(function (i) {
        if (typeof values[i] === "object") {
            iterateParent = parent.slice();
            iterateParent.push(i);
            iterateValues(values[i], iterateParent, form, Array.isArray(values[i]), isTraditionalArray);
        } else {
             form.append(getInput(i, values[i], parent, isArray, isTraditionalArray));
        }
    });
};