Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在使用jquery提交时向表单添加数组?_Javascript_Jquery_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

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");
            }
        });