动态添加字段输入不会存储值并传递给控制器

时间:2016-07-31 19:46:36

标签: javascript jquery asp.net-mvc

我正致力于产品销售系统。我有3个字段产品名称,数量(文本框)和产品类型下拉列表。我动态添加行,然后列出所有已订购的产品,然后将其传递给控制器​​。但它失败了。另请注意,稍后我需要使用select2,所以我希望有字段的唯一ID。我认为问题主要围绕如何从字段中获取值,然后将其传递给模型。我的小提琴是点击[这里]小提琴(https://jsfiddle.net/Yogida/x19p3pqp/")

this

});

cshtml:

   $("#btnSubmit").click(function(e) {
e.preventDefault();
var _this = $(this);
var url = _this.closest("form").attr("action");

var rows = [];
var items = $(".itemRow");

alert(items);
$.each(items, function(i, item) {

  // alert(i);
  // alert(item);
  // alert(items);
  var partnumber = $(item).find("input[id='PartNumber" + i + "[]']").val();

  var partquantity = $(item).find("input[id='PartQuantity" + i + "[]']").val();

  var partordertypeid = $(item).find("select[id='PartOrderTypeId" + i + "[]']").val();

  var row = {
    PartNumber: partnumber,
    Quantity: partquantity,
    OrderTypeId: partordertypeid
  };
  rows.push(row);
});

//Let's post to server
$.ajax({
    type: "POST",
    url: url,
    data: JSON.stringify(rows),
    contentType: "application/json",

    success: function() {

      window.setTimeout(function() {
        location.reload()
      }, 3000)
    }

  })
  //.done(function (result) {
  //    //do something with the result
  //    // window.alert(rows);

//})

     @ 类="出席" ID ="出席" @


1 个答案:

答案 0 :(得分:0)

我部分解决了这个问题。现在值通过分配id和使用for循环来存储,但是当我删除中间的任何记录时它有问题。我现在尝试的另一件事是使用select2添加自动完成搜索。当我添加新项目从第二行调用上课时,我没有获得select2的搜索功能。任何有关剩余位的帮助都将受到赞赏。我的javascript看起来像

var max_fields = 10; //maximum input boxes allowed
        var wrapper = $(".itemRow"); //Fields wrapper
        var add_button = $('.add_row');  // (".add_row")//$(".addRow"); //Add button ID
        var indexNo = 2;

        var x = 1; //initlal text box count
        $(add_button).click(function (e) { //on add input button click
            //e.preventDefault();
            if (x < max_fields) { //max input box allowed
                x++; //text box increment
                //$(wrapper).append('<div><input type="text" name="mytext[]" id="attendee"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
                //$(wrapper).append('<div><input type="text" class="formfield" name="PartNumber[]" /><input type="text" class="formfield" name="PartQuantity[]" /><input type="text" class="formfield" name="PartOrderTypeId[]"><a href="#" class="remove_field">Remove</a></div>'); //.appendTo($formfield); //add input box 
                $(wrapper).append('<div id="itemRow' + indexNo + '"><input type="text" class="formfield attend" name="PartNumber' + indexNo + '[]" id="partnumberid' + indexNo + '[]" /><input type="text" class="formfield" name="PartQuantity' + indexNo + '[]" id="partquantityid' + indexNo + '[]" /><input type="text" id="partordertypeid' + indexNo + '[]" class="formfield" name="PartOrderTypeId' + indexNo + '[]"><a href="#" class="remove_field" name="Delete' + indexNo + '">Remove</a></div>'); //.appendTo($formfield); //add input box 
                indexNo++;
            }



        });

        $(wrapper).on("click", ".remove_field", function (e) { //user click on remove text
            e.preventDefault();
            $(this).parent('div').remove();
            x--;
            indexNo--;
        })

        $("#deleteRow").on('click', function () {
            //var template = $("#items").find(".itemRow").last().remove();
            //var template = $("#items").find(".itemRow").
            $('.formfield:checkbox:checked').parents(".itemRow").remove();
            // $('.itemRow').remove(template);

        });

        $("#btnSubmit").click(function (e) {
            e.preventDefault();
            var _this = $(this);
            var url = _this.closest("form").attr("action");

            var rows = [];
            var items = $(".itemRow");

            alert(items);
            var counter = 1;
            //$.each(items, function (i, item) {
            //for (i = 0; i < 3; i++)
            for (i = 0; i < indexNo; i++)
                {
                //var partnumber = $(item).find("input[id='partnumberid[]']").val();
                //alert(i);
               // alert(item);
                alert(items);
                var partnumber = $(items).find("input[name='PartNumber" + counter + "[]']").val();
                //var partnumber = $(items).find("input[name='PartNumber[]']").val();
                //var partnumber = $(item).find("input[name='PartNumber" + i + "[]']").val();
                //var partnumber = $(item).find("input[name='PartNumber']").select2("data");   //newRow.find('.attend').select2('data', null)
                alert(i);

                var partquantity = $(items).find("input[name='PartQuantity" + counter + "[]']").val();
                //var partquantity = $(item).find("input[name='PartQuantity" + i +"[]']").val();
                //var partordertypeid = $(item).find("input[name='PartOrderTypeId']").val();

                var partordertypeid = $(items).find("input[name='PartOrderTypeId" + counter + "[]']").val();
                //var partordertypeid = $(item).find("select[id='PartOrderTypeId[]']").val();
                //var partordertypeid = $(item).find("select[name='PartOrderTypeId" + i + "[]']").val();

                var row = { PartNumber: partnumber, Quantity: partquantity, OrderTypeId: partordertypeid };
                rows.push(row);
                counter++;
                }
            //});

            //Let's post to server
            $.ajax({
                type: "POST",
                url: url,
                data: JSON.stringify(rows),
                contentType: "application/json",

                success: function () {
                    //$("#part_message").html("<p> Your article was successfully added!</p>");
                    window.setTimeout(function () { location.reload() }, 3000)
                }

            })
            //.done(function (result) {
            //    //do something with the result
            //    // window.alert(rows);

            //})

        });




    });

    $(document).ready(function () {

        $('.attend').select2(
            {
                //Does the user have to enter any data before sending the ajax request
                minimumInputLength: 1,
                allowClear: true,
                ajax: {
                    //How long the user has to pause their typing before sending the next request

                    //The url of the json service
                    url: "/Order/TypeHead",
                    dataType: 'json',
                    //Our search term and what page we are on
                    data: function (term) {
                        return {
                            searchTerm: term
                        };
                    },
                    results: function (data, page) {
                        return { results: data };
                    }
                }
            });