如何使用 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 将检查的行发送到服务器?的主要内容,如果未能解决你的问题,请参考以下文章