正如标题所说,我需要从.js文件向MVC控制器发送一些值,其中一个值是对应于List<>的对象数组。在控制器中,问题是当到达控制器时列表计数为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时,所有内容都像魅力一样,但不知道如何获取新页面,有关获取新页面的任何帮助吗?
答案 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));
}
});
};