Javascript 如何在使用jquery提交时向表单添加数组?
我在页面上有一个表单,输入的数据被发布到服务器上。我现在想在帖子中添加一个数组,如下所示:Javascript 如何在使用jquery提交时向表单添加数组?,javascript,jquery,asp.net-mvc,asp.net-mvc-5,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 5,我在页面上有一个表单,输入的数据被发布到服务器上。我现在想在帖子中添加一个数组,如下所示: $("#createTankForm").submit(function() { if ($(this).valid()) { var data = $(this).serializeArray(); var celVerLst = []; var formsLst = $(".TankCalVertList").find("#createTankF
$("#createTankForm").submit(function() {
if ($(this).valid()) {
var data = $(this).serializeArray();
var celVerLst = [];
var formsLst = $(".TankCalVertList").find("#createTankForm .adminRow");
$(formsLst).each(function (i, v) {
var celVert = {
Number: $(this).find("#Number").val(),
Border: $(this).find("#Border").val(),
Volume: $(this).find("#Volume").val(),
Constant: $(this).find("#Constant").val(),
}
celVerLst.push(celVert);
});
data.push({
name: "TankCalVerts",
value: celVerLst
});
data = jQuery.param(data);
// at this point TankCalVerts is "object[]"
$.automation.worker.postUserData(this.action, data, function(data) {
$(".AdmClicked").click();
});
} else {
$(this).addClass("invalidForm");
}
return false;
});
正如上面的评论所写,我得到
TankCalVerts=%5Bobject+对象%5D%2C%5Bobject+对象%5D
在岗
在行动方法中:
我该怎么做
编辑:
有两种可能的答案
答案1是
创建一个json对象,并将表单中的所有数据与TankCalVerts数组一起读取到该对象,如下所示
data: { id: $("#INPUTID").val(), Lo:$("#LoID").val(), Level:$("#LevelID").val(),../*similerly read all values here..,*/, TankCalVerts: celVerLst }
并在$.ajax方法中发布此数据对象。答案2: 像这样更改代码
去掉这一部分 并替换循环$(formsLst)。每个循环都是这样的
var Counter = 0;
$(formsLst)
.each(function (i, v) {
data.push({
name: "TankCalVerts[" + Counter + "].Number",
value: $(this).find("#Number").val()
});
data.push({
name: "TankCalVerts[" + Counter + "].Border",
value: $(this).find("#Border").val()
});
data.push({
name: "TankCalVerts[" + Counter + "].Volume",
value: $(this).find("#Volume").val()
});
data.push({
name: "TankCalVerts[" + Counter + "].Constant",
value: $(this).find("#Constant").val()
});
Counter = Counter + 1;
});
这将相应地将列表/数组添加到您的数据中,并让剩余的代码保持原样。它应该将数组/列表与表单数据一起发布。经过思考和一位杰出朋友的帮助,我们得出了以下结论:
var objFormData = {};
for (var intIndex = 0; intIndex < data.length; intIndex++) {
objFormData[data[intIndex].name] = data[intIndex].value;
}
我们不知道
$.automation.worker.posterData()
如何处理这些数据,也不知道您希望以何种格式接收这些数据。显示所有相关信息code@charlietfl请检查编辑为什么不只是正确地生成表单控件(您当前创建的元素具有重复的id
属性,这是无效的html,因此我假设name
属性也是重复的)。对于现有的集合项,使用自定义的EditorTemplate的循环(引用),或者如果动态添加的项引用,则脚本将变为$(“#createTankForm”).submit(function(){$.post(yourUrl,$(this).serialize(),function(){
我已经有了一个simmilalr解决方案,但我试图避免它,因为我这里有很多参数,不想把它们都写出来。我的解决方案为我提供了一种方法,但效果很好,没有一种方法可以让我多出一个解决方案(更像是一个把戏);)您将子数组转换为JSON字符串并作为单个参数发送,然后在服务器端进行JSON解码。这是另一种方式。尽管我更喜欢下面给出的答案
var Counter = 0;
$(formsLst)
.each(function (i, v) {
data.push({
name: "TankCalVerts[" + Counter + "].Number",
value: $(this).find("#Number").val()
});
data.push({
name: "TankCalVerts[" + Counter + "].Border",
value: $(this).find("#Border").val()
});
data.push({
name: "TankCalVerts[" + Counter + "].Volume",
value: $(this).find("#Volume").val()
});
data.push({
name: "TankCalVerts[" + Counter + "].Constant",
value: $(this).find("#Constant").val()
});
Counter = Counter + 1;
});
var objFormData = {};
for (var intIndex = 0; intIndex < data.length; intIndex++) {
objFormData[data[intIndex].name] = data[intIndex].value;
}
var objFormData = {};
for (var intIndex = 0; intIndex < data.length; intIndex++) {
objFormData[data[intIndex].name] = data[intIndex].value;
}
$.automation.worker
.postJson(this.action,
JSON.stringify(objFormData),
function(data) {});
postJson: function(url, data, callback) {
$.LoadingOverlay("show");
$.ajax({
url: url,
type: "POST",
data: data,
contentType: "application/json; charset=utf-8",
success: function(data) {
if (callback)
callback(data);
$.LoadingOverlay("hide");
}
});