简要说明: 我有一个动态表,可以在其中添加ID,NAME,PRICE,COST和TOTAL的产品。
当我单击一个按钮时,将显示一个充满产品的下拉列表,将产品添加到表格中
该表内部有输入,以便根据产品价格设置数量和总计。
问题是,完成表后,我需要在控制器中处理表值才能在SQL中做一些事情。
我读过其他一些类似的案例,但我认为没有一个像我的。
我的表中有1种产品的示例
<table id="tablaCompras" class="table table-striped table-responsive" cellpadding="0" cellspacing="0" name="tablaCompras">
<tbody>
<tr align="left">
<th scope="col">Número Artículo</th>
<th scope="col">Artículo</th>
<th scope="col">Cantidad</th>
<th scope="col">Costo Unitario</th>
<th scope="col">Total</th>
<th scope="col">Precio Unitario</th>
<th scope="col">Impresión</th>
<th scope="col">Eliminar</th>
</tr>
<tr id="0" align="left"><td>31</td><td width="100%">ANILLO DE PLATA 030269</td><td> <input type="text" id="txtCantidadTabla0" value="0.00" name="txtCantidadTabla" 0min="1" style="background: transparent; border:none; align:center; max-width:100px;" onblur="getTotal(txtCantidadTabla0.value ,txtCostoTabla0.value,0)" required=""></td>
<td> <input type="text" id="txtCostoTabla0" name="txtCostoTabla0" value="89.7" style="background: transparent; border:none; align:center; max-width:100px;" onblur="getTotal(txtCantidadTabla0.value ,txtCostoTabla0.value,0)" required=""> </td>
<td> <input id="txtTotalTabla0" type="text" style="background: transparent; border:none; align:center; max-width:100px;" readonly=""> </td>
<td> <input type="text" id="txtPrecioTabla0" name="txtPrecioTabla0" value="269.9" style="background: transparent; border:none; align:center; max-width:100px;" required=""></td>
<td> <a href="#tabla"><img src="../Img/imprimir.png" style="width:30px; height:30px;"></a></td><td> <a href="#tabla"><img src="../Img/borrar.png" onclick="deleteRow(0)" style="width:30px; height:30px;"></a></td>
</tr>
</tbody>
</table>
我的表格放在Html.BeginForm中,如下所示:
@using (Html.BeginForm("Prueba", "AltaCompra", FormMethod.Post))
{
}
在我的控制器中,我试图像这样接收它:
[HttpPost]
public ActionResult Prueba(FormCollection collection)
{
}
但是表不能通过formcollection传递。 有关如何处理表格信息的任何线索
非常感谢
答案 0 :(得分:1)
如果使用javascript / jQuery添加新行,则必须使用格式name="@("txtCantidadTabla[" + @i + "]")"
更新名称以供输入。
@for (var i = 0; i < 5; i++) // I assume the total product
{
<tr id="0" align="left">
<td><input type="hidden" name="productid" value="31" />31</td>
<td width="100%">ANILLO DE PLATA 030269</td>
<td> <input type="text" id="@("txtCantidadTabla[" + @i + "]")" value="0.00" name="@("txtCantidadTabla[" + @i + "]")" 0min="1" style="background: transparent; border:none; align:center; max-width:100px;" onblur="getTotal(txtCantidadTabla0.value ,txtCostoTabla0.value,0)" required=""></td>
<td> <input type="text" id="@("txtCantidadTabla[" + @i + "]")" name="@("txtCostoTabla[" + @i + "]")" value="89.7" style="background: transparent; border:none; align:center; max-width:100px;" onblur="getTotal(txtCantidadTabla0.value ,txtCostoTabla0.value,0)" required=""> </td>
<td> <input id="txtTotalTabla0" type="text" style="background: transparent; border:none; align:center; max-width:100px;" readonly=""> </td>
<td> <input type="text" id="@("txtCantidadTabla[" + @i + "]")" name="@("txtPrecioTabla[" + @i + "]")" value="269.9" style="background: transparent; border:none; align:center; max-width:100px;" required=""></td>
<td> <a href="#tabla"><img src="../Img/imprimir.png" style="width:30px; height:30px;"></a></td>
<td> <a href="#tabla"><img src="../Img/borrar.png" onclick="deleteRow(0)" style="width:30px; height:30px;"></a></td>
</tr>
}
然后通过FormCollection在控制器中获取数据
[HttpPost]
public ActionResult Prueba(FormCollection collection)
{
for (var i = 0; i < 5; i++)
{
var txtCantidadTabla = collection["txtCantidadTabla[" + i + "]"];
var txtCostoTabla = collection["txtCostoTabla[" + i + "]"];
var txtPrecioTabla = collection["txtPrecioTabla[" + i + "]"];
// handle your logic here
}
return View();
}
答案 1 :(得分:0)
基于id
的{{1}}与输入元素的<tr>
属性的最后一个字符匹配,您可能需要修改代码以生成name
属性在索引值周围具有数组符号,例如name
,如果您希望以POST形式提交多个具有相同名称的值,则该行的索引为硬编码索引。
否则,如前一条注释中所建议,使用JavaScript处理表单提交,并通过迭代表行来构建要传递给Controller的对象。