在单击按钮时在 Bootstrap 弹出窗口中显示嵌套的子表记录

Display nested Child Table records in Bootstrap Popup on Button Click

提问人:Isoftmaster 提问时间:5/25/2022 更新时间:6/6/2022 访问量:473

问:

如果我们单击子项,它可以在弹出窗口中输入值后打开一个弹出窗口,我们可以关闭该窗口

单击父行中的添加函数后,值可以转到该行中的上一行

订单值以表格格式显示

我需要在弹出窗口中显示订单值。

下面的代码是在 AngularJs 中,这正是我想要的,但是当我提交数据时,有人可以在没有 angular 的情况下转换相同的结果,它会将所有数据传递给 asp.net 核心控制器。

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.9/angular.min.js"></script>
<script type="text/javascript">
  var app = angular.module('MyApp', [])
  app.controller('MyController', function($scope, $window) {
    $scope.Customers = [{
      Name: "John Hammond",
      Country: "United States",
      Orders: [{
          OrderId: 10248,
          Freight: 32.38,
          ShipCountry: 'France'
        },
        {
          OrderId: 10249,
          Freight: 12.43,
          ShipCountry: 'Japan'
        },
        {
          OrderId: 10250,
          Freight: 66.35,
          ShipCountry: 'Russia'
        }
      ]
    }];

    $scope.Orders = [];
    $scope.Add = function() {
      var customer = {};
      customer.Name = $scope.Name;
      customer.Country = $scope.Country;
      customer.Orders = $scope.Orders;
      $scope.Customers.push(customer);
      $scope.Orders = [];
      $scope.Name = "";
      $scope.Country = "";
    };
    $scope.add2 = function() {

      var items = {};
      items.OrderId = $scope.OrderId;
      items.Freight = $scope.Freight;
      items.ShipCountry = $scope.ShipCountry;
      $scope.Orders.push(items);
      $scope.OrderId = "";
      $scope.Freight = "";
      $scope.ShipCountry = "";
    }
    $scope.Remove = function(index) {
      var name = $scope.Customers[index].Name;
      if ($window.confirm("Do you want to delete: " + name)) {
        $scope.Customers.splice(index, 1);
      }
    }
    $scope.remove1 = function(index) {
      var name = $scope.Orders[index].OrderId;
      if ($window.confirm("Do you want to delete: " + name)) {
        $scope.Orders.splice(index, 1);
      }
    }
  });
</script>
<div ng-app="MyApp" ng-controller="MyController">
  <table cellpadding="0" cellspacing="0">
    <tr>
      <th>
        Name
      </th>
      <th>
        Country
      </th>
      <th>
        Orders
      </th>
      <th>
        &nbsp;
      </th>
    </tr>
    <tbody ng-repeat="m in Customers">
      <tr>
        <td>
          <input type="text" value="{{m.Name}}" />
        </td>
        <td>
          <input type="text" value="{{m.Country}}" />
        </td>
        <td value="{{m.subitems}}">
          <button type="button" class="btn btn-primary" ng-init="clicked=false" ng-click="clicked=!clicked">
                        View Orders</button>
          <div class="modal fade in" aria-hidden="false" style="display: block;" ng-show="clicked">
            <div class="modal-dialog">
              <div class="modal-content">
                <div class="modal-header">
                  <button type="button" class="close" ng-click="clicked=false">
                                        ×</button>
                  <h4 class="modal-title">
                    Order Details</h4>
                </div>
                <div class="modal-body">
                  <table class="table table-condensed">
                    <thead>
                      <tr style="padding-left: 10px; padding-right: 10px;" class="active">
                        <th class="thick-line" style="padding-left: 10px; padding-right: 20px; padding-top: 6px;
                                                    padding-bottom: 6px;">
                          OrderId
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                          Freight
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                          ShipCountry
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                        </th>
                      </tr>
                    </thead>
                    <tbody ng-repeat="o in m.Orders">
                      <tr>
                        <td>
                          {{o.OrderId}}
                        </td>
                        <td>
                          {{o.Freight}}
                        </td>
                        <td>
                          {{o.ShipCountry}}
                        </td>
                      </tr>
                    </tbody>
                  </table>
                </div>
                <div class="modal-footer">
                  <button type="button" class="btn btn-primary" ng-click="clicked=false">
                                        Ok</button>
                </div>
              </div>
            </div>
          </div>
        </td>
        <td>
          <input type="button" ng-click="Remove($index)" value="Remove" class="btn btn-danger" />
        </td>
      </tr>
    </tbody>
    <tfoot>
      <tr>
        <td>
          <input type="text" ng-model="Name" />
        </td>
        <td>
          <input type="text" ng-model="Country" />
        </td>
        <td>
          <button type="button" class="btn btn-primary" ng-model="subitems" data-toggle="modal" data-target="#popup">
                        Add Orders</button>
        </td>
        <td>
          <input type="button" ng-click="Add()" class="btn btn-primary" value="Add" />
        </td>
      </tr>
    </tfoot>
  </table>
  <div class="modal fade" id="popup" role="dialog">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">
                        ×</button>
          <h4 class="modal-title">
            Modal Header</h4>
        </div>
        <div class="modal-body">
          <div class="s2vk-container">
            <div class="row">
              <div class="col-md-8">
                <div class="panel panel-default">
                  <table class="table table-condensed">
                    <thead>
                      <tr style="padding-left: 10px; padding-right: 10px;" class="active">
                        <th class="thick-line" style="padding-left: 10px; padding-right: 20px; padding-top: 6px;
                                                    padding-bottom: 6px;">
                          OrderId
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                          Freight
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                          ShipCountry
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                        </th>
                      </tr>
                    </thead>
                    <tbody>
                      <tr style="padding-left: 20px; padding-right: 20px;" ng-model="myData2" ng-repeat="subitem in Orders">
                        <td>
                          {{subitem.OrderId}}
                        </td>
                        <td>
                          {{subitem.Freight}}
                        </td>
                        <td>
                          {{subitem.ShipCountry}}
                        </td>
                        <td>
                          <button type="button" class="btn btn-sm btn-danger" ng-click="remove1($index)" readonly="readonly">
                                                        Delete</button>
                        </td>
                      </tr>
                    </tbody>
                    <tfoot>
                      <tr style="padding-left: 20px; padding-right: 20px;">
                        <td>
                          <input type="text" class="input-sm form-control" ng-model="OrderId" />
                        </td>
                        <td>
                          <input type="text" class="input-sm form-control" ng-model="Freight" />
                        </td>
                        <td>
                          <input type="text" class="input-sm form-control" ng-model="ShipCountry" />
                        </td>
                        <td>
                          <button type="button" class="btn btn-primary" ng-click="add2()">
                                                        Add</button>
                        </td>
                      </tr>
                    </tfoot>
                  </table>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">
                        Close</button>
        </div>
      </div>
    </div>
  </div>
</div>

javascript jquery angularjs asp.net-core dom

评论


答:

3赞 Taleeb 6/6/2022 #1

我尝试使用jQuery实现相同的功能。html 包含 html 和模态的标记。操作是在 JavaScript 中完成的。

不是最好的代码,但它应该给出一个想法。

当用户单击“提交”时,您可以向 asp.net 控制器发送 或发送到 控制器。cartcart.customers

class Customer {
  constructor(name, country, orders) {
    this.Name = name;
    this.Country = country;
    this.Orders = orders;
  }

  addOrder(id, frieght, shiptCountry) {
    var order = {};
    order.OrderId = id;
    order.Freight = frieght;
    order.ShipCountry = shiptCountry;

    this.Orders.push(order);
  }

  removeOrder(index) {
    var name = this.Orders[index].OrderId;
    if (confirm("Do you want to delete: " + name)) {
      this.Orders.splice(index, 1);
    }
  }
}

var c = new Customer('John Hammond', 'United States', [{
    OrderId: 10248,
    Freight: 32.38,
    ShipCountry: 'France'
  },
  {
    OrderId: 10249,
    Freight: 12.43,
    ShipCountry: 'Japan'
  },
  {
    OrderId: 10250,
    Freight: 66.43,
    ShipCountry: 'Russia'
  }
]);

var cart = {
  customers: new Array(c),
  add: function(name, country, orders) {
    var customer = new Customer(name, country, orders);
    this.customers.push(customer);
  },
  remove: function(index) {
    var name = this.customers[index].Name;
    if (confirm("Do you want to delete: " + name)) {
      this.customers.splice(index, 1);
    }
  }
};

function updateContent() {
  $('#tableBody').html('');

  cart.customers.forEach(function(element, index) {


    $('#tableBody').append('<tr></tr>');
    $('#tableBody tr:last').append('<td><input type="text" value="' + element.Name + '" /></td>');
    $('#tableBody tr:last').append('<td><input type="text" value="' + element.Country + '" /></td>');
    $('#tableBody tr:last').append('<td><button type="button" class="btn btn-primary" data-index="' + index + '" data-toggle="modal" data-target="#popup">View Orders</button></td>');
    $('#tableBody tr:last').append('<input type="button" data-index="' + index + '" value="Remove" class="btn btn-danger btnRemoveCust" />');
  });

  $('.btnRemoveCust').click(function() {
    var index = $(this).data('index');
    cart.remove(index);
    updateContent();
  });

};

updateContent();
var currentOrders = [];

$('#btnAdd').click(function() {
  var name = $('#txtName').val();
  var country = $('#txtCountry').val();

  cart.add(name, country, currentOrders);
  $('#txtName').val('');
  $('#txtCountry').val('');
  currentOrders = [];

  updateContent();
});



$('#popup').on('show.bs.modal', function(event) {
  var source = $(event.relatedTarget);
  var index = source.data('index');
  var orders = [];
  if (index === -1) {
    //Customer is not yet created. Use currentOrder
    current = true;
    orders = currentOrders;
    $(this).find('tfoot').show();
  } else {
    current = false;
    orders = cart.customers[index].Orders;
    $(this).find('tfoot').hide();
  }

  updatePopUp($(this), orders, current);
});

function updatePopUp(modal, orders) {
  modal.find('tbody').html('');
  if (orders) {
    orders.forEach(function(element, index) {

      modal.find('tbody').append('<tr style="padding-left: 20px; padding-right: 20px;" ></tr>');
      modal.find('tbody tr:last').append('<td><input type="text" class="input-sm form-control" readonly value="' + element.OrderId + '" /></td>');
      modal.find('tbody tr:last').append('<td><input type="text" class="input-sm form-control" readonly value="' + element.Freight + '" /></td>');
      modal.find('tbody tr:last').append('<td><input type="text" class="input-sm form-control" readonly value="' + element.ShipCountry + '" /></td>');
      if (current) {
        modal.find('tbody tr:last').append('<td><input type="button" data-index="' + index + '" value="Remove" class="btn btn-danger btnRemoveOrder" /></td>');
      }

    });

    $('.btnRemoveOrder').click(function() {
      var index = $(this).data('index');
      currentOrders.splice(index, 1);
      updatePopUp($('#popup'), currentOrders, false);
    })
  }
}

$('#btnAddOrder').click(function() {

  var order = {
    OrderId: $('#txtId').val(),
    Freight: $('#txtFreight').val(),
    ShipCountry: $('#txtShipCountry').val()
  }

  currentOrders.push(order);
  $('#txtId').val('');
  $('#txtFreight').val('');
  $('#txtShipCountry').val('');

  updatePopUp($('#popup'), currentOrders, false);

});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


<div id='myApp'>
  <table cellpadding="0" cellspacing="0">
    <tr>
      <th>
        Name
      </th>
      <th>
        Country
      </th>
      <th>
        Orders
      </th>
      <th>
        &nbsp;
      </th>
    </tr>
    <tbody id='tableBody'></tbody>
    <tfoot>
      <tr>
        <td>
          <input type="text" id='txtName' />
        </td>
        <td>
          <input type="text" id='txtCountry' />
        </td>
        <td>
          <button type="button" class="btn btn-primary" data-toggle="modal" data-index="-1" data-target="#popup">
            Add Orders</button>
        </td>
        <td>
          <input type="button" id="btnAdd" class="btn btn-primary" value="Add" />
        </td>
      </tr>
    </tfoot>
  </table>

  <div class="modal fade" id="popup" role="dialog">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">
            ×</button>
          <h4 class="modal-title">
            Modal Header</h4>
        </div>
        <div class="modal-body">
          <div class="s2vk-container">
            <div class="row">
              <div class="col-md-8">
                <div class="panel panel-default">
                  <table class="table table-condensed">
                    <thead>
                      <tr style="padding-left: 10px; padding-right: 10px;" class="active">
                        <th class="thick-line" style="padding-left: 10px; padding-right: 20px; padding-top: 6px;
                                                    padding-bottom: 6px;">
                          OrderId
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                          Freight
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                          ShipCountry
                        </th>
                        <th style="padding-left: 10px; padding-right: 10px;" class="thick-line">
                        </th>
                      </tr>
                    </thead>
                    <tbody id='#modalBody'>

                    </tbody>
                    <tfoot>
                      <tr style="padding-left: 20px; padding-right: 20px;">
                        <td>
                          <input type="text" id='txtId' class="input-sm form-control" ng-model="OrderId" />
                        </td>
                        <td>
                          <input type="text" id='txtFreight' class="input-sm form-control" ng-model="Freight" />
                        </td>
                        <td>
                          <input type="text" id='txtShipCountry' class="input-sm form-control" ng-model="ShipCountry" />
                        </td>
                        <td>
                          <button type="button" id='btnAddOrder' class="btn btn-primary">
                            Add</button>
                        </td>
                      </tr>
                    </tfoot>
                  </table>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">
            Close</button>
        </div>
      </div>
    </div>
  </div>

</div>

评论

0赞 Isoftmaster 11/4/2022
你能帮我解决这个问题 stackoverflow.com/questions/74312127/ 吗?
0赞 Isoftmaster 11/7/2022
如果我想添加标题(带有一些文本框)如何添加它们?
0赞 Taleeb 11/8/2022
喜欢:<th> <input type="text" id='txtNameHeader' value="Name" /></th>
0赞 Isoftmaster 11/8/2022
不,我的意思是如何在脚本中将其传递给 cart 或 cart.header