如何将表值传递给控制器​​?

时间:2019-05-07 22:14:27

标签: c# asp.net-mvc

简要说明: 我有一个动态表,可以在其中添加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传递。 有关如何处理表格信息的任何线索

非常感谢

2 个答案:

答案 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的对象。