如何使用 ASP.NET MVC 通过 Ajax 将检查的行发送到服务器?

Posted

技术标签:

【中文标题】如何使用 ASP.NET MVC 通过 Ajax 将检查的行发送到服务器?【英文标题】:How to send checked rows to server via Ajax using ASP.NET MVC? 【发布时间】:2021-01-20 22:07:11 【问题描述】:

我有一个鞋子列表表,从最后一个<th>Area</th> 开始,每一行都有复选框(作为服务器中的布尔值)。

<a class="btn btn-primary float-right btn-sm text-white" id="cambiarAreaE">Trasladar a Ensuelado</a>

<table id="tabla-alistados" class="table table-bordered table-striped table-hover">
   <thead>
      <tr>
         <th>Cod.</th>
         <th class="text-red">Ref. Solicitud</th>
         <th class="text-red">Ref. Pedido</th>
         <th>Imagen</th>
         <th>Talla</th>
         <th>Atraso por</th>
         <th>Area</th>
         <th class="text-center">Acciones</th>
      </tr>
   </thead>
   <tbody>
      @foreach (var detalle in Model.DetalleSolicitud)
      
      <tr>
         <td> ... 
         <td>
         <td> ... 
         <td>
         <td> ... 
         <td>
         <td> ... 
         <td>
         <td> ... 
         <td>
         <td> ... 
         <td>
         <td class="text-center">
            @detalle.Produccion.Area
            <br /><br />
            <div class="form-group clearfix">
               <div class="icheck-primary d-inline">
                  <input type="checkbox" id="checkboxPrimary1" class="checkboxAlistados" style="width: 25px; height: 25px">
                  <label for="checkboxPrimary1"> </label>
               </div>
            </div>
         </td>
         <td class="text-center"> ... </td>
      </tr>
      
</table>

这就是它的呈现方式,倒数第二个有复选框:

我正在尝试仅将检查的行发送到控制器,但是...我认为简单快速的方法是将所有 Id 作为在其行中检查的数组发送。

这就是我在 Jquery 中所拥有的:

        $("#cambiarAreaE").click(function (e) 
       e.preventDefault();

        var checkedIds = new Array();

        var table = $("#tabla-alistados tr").children("td");
        
                $.ajax(
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                type: 'POST',
                data: checkedIds,
                url: "/Produccion/CambiarAreas/",
                success: function (result, state) 
                    location.reload();
                ,
                error: function () 
                    alert("Un error interno ha ocurrido.")
                

            );

    );

我该如何解决这个问题?这让我很困难,因为有很多行,我不知道如何编写代码。

【问题讨论】:

您好,您需要获取Cod 字段值吗?那是一些输入框还是纯文本? Id(cod) 是纯文本,我需要获取这些已检查的 Id。我认为可以将它们存储在列表中并将它们发送到服务器。 【参考方案1】:

您可以使用 each 循环遍历您的 .checkboxAlistados 进行检查,然后使用 .closest() 获取 Cod 列的值并将其推送到数组中。

演示代码

$("#cambiarAreaE").click(function(e) 
  e.preventDefault();

  var checkedIds = new Array();
  //loop through tbody > class checkboxAlistados
  var selectors = $("#tabla-alistados tbody .checkboxAlistados:checked");
  selectors.each(function() 
    //get closest tr and then get Cod value 
    checkedIds.push($(this).closest('tr').find("td:eq(0)").text())

  );
  console.log(checkedIds)
  //your ajax call ..do JSON stringify 

);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="tabla-alistados" class="table table-bordered table-striped table-hover">
  <thead>
    <tr>
      <th>Cod.</th>
      <th class="text-red">Ref. Solicitud</th>
      <th class="text-red">Ref. Pedido</th>
      <th>Imagen</th>
      <th>Talla</th>
      <th>Atraso por</th>
      <th>Area</th>
      <th class="text-center">Acciones</th>
    </tr>
  </thead>
  <tbody>

    <tr>
      <td>12</td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td class="text-center">
        @detalle.Produccion.Area
        <br /><br />
        <div class="form-group clearfix">
          <div class="icheck-primary d-inline">
            <input type="checkbox" id="checkboxPrimary1" class="checkboxAlistados" style="width: 25px; height: 25px">
            <label for="checkboxPrimary1"> </label>
          </div>
        </div>
      </td>
      <td class="text-center"> ... </td>
    </tr>

    <tr>
      <td>13</td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td class="text-center">
        @detalle.Produccion.Area
        <br /><br />
        <div class="form-group clearfix">
          <div class="icheck-primary d-inline">
            <input type="checkbox" id="checkboxPrimary1" class="checkboxAlistados" style="width: 25px; height: 25px">
            <label for="checkboxPrimary1"> </label>
          </div>
        </div>
      </td>
      <td class="text-center"> ... </td>
    </tr>

    <tr>
      <td>14</td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td> ...
      </td>
      <td class="text-center">
        @detalle.Produccion.Area
        <br /><br />
        <div class="form-group clearfix">
          <div class="icheck-primary d-inline">
            <input type="checkbox" id="checkboxPrimary1" class="checkboxAlistados" style="width: 25px; height: 25px">
            <label for="checkboxPrimary1"> </label>
          </div>
        </div>
      </td>
      <td class="text-center"> ... </td>
    </tr>

</table>

<button id="cambiarAreaE">Click me</button>

【讨论】:

按预期工作,但是......还有其他好的做法或方法可以实现这一目标吗?因为用户可以按 F12 并编辑表格 ID,这可能很危险。 您好,您无法阻止用户对数据进行任何客户端操作。您需要在服务器端进行处理。即:验证您从客户端获得的输入,并根据此进行进一步处理

以上是关于如何使用 ASP.NET MVC 通过 Ajax 将检查的行发送到服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 jQuery ajax 更新 ASP.NET MVC ViewData?

如何在 ASP.NET MVC 中使用 Ajax 调用刷新局部视图?

如何通过在 ASP.NET MVC 框架中调用 ajax 来显示 kendoDropDownList?

如何在 ASP.NET MVC 中将 base64String 转换为 blob 并通过 ajax 发送到控制器?

如何在 ASP.NET MVC 中通过 Ajax 提交表单?

如何使用ajax在asp.net mvc中上传多个图像