Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将表值传递给控制器?_C#_Asp.net Mvc - Fatal编程技术网

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

C# 如何将表值传递给控制器?,c#,asp.net-mvc,C#,Asp.net Mvc,简要说明: 我有一个动态表,在其中添加具有ID、名称、价格、成本和总额的产品 当我单击一个按钮时,在一个充满产品的下拉列表中,一个产品被添加到表中 表中有输入,以便根据产品价格设置数量和总数 问题是,当完成表时,我需要在控制器中处理表值,以便在SQL中执行一些操作 我读过一些类似的案例,但我认为没有一个像我这样 带有1个产品的我的表格示例 在我的控制器中,我尝试这样接收它: @using (Html.BeginForm("Prueba", "AltaCompra", FormMethod.Pos

简要说明: 我有一个动态表,在其中添加具有ID、名称、价格、成本和总额的产品

当我单击一个按钮时,在一个充满产品的下拉列表中,一个产品被添加到表中

表中有输入,以便根据产品价格设置数量和总数

问题是,当完成表时,我需要在控制器中处理表值,以便在SQL中执行一些操作

我读过一些类似的案例,但我认为没有一个像我这样

带有1个产品的我的表格示例

在我的控制器中,我尝试这样接收它:

@using (Html.BeginForm("Prueba", "AltaCompra", FormMethod.Post))
{
}
[HttpPost]
public ActionResult Prueba(FormCollection collection)
{
}
但是不能将表传递给formcollection。 关于如何处理表信息的任何线索。

根据与输入元素的name属性的最后一个字符相匹配的id,您可能需要修改代码以生成name属性,使其在索引值周围具有数组符号,例如name=txtCostoTabla[0]其中,如果希望在表单POST中以相同的名称提交多个值,则行的索引是硬编码索引


否则,如前一条注释中所建议的,使用JavaScript处理表单提交,并通过迭代表行构建一个对象以传递给控制器。

您需要使用格式name=@txtCantidadTabla[++@i+]更新输入的名称,如果您通过JavaScript/jQuery添加新行,则必须使用此格式添加名称

 @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();
        }

如果你要做一个表单发布,你应该在每个输入上有一个唯一的名称,但是看起来每个tr都会重复输入名称。现在更常用的方法是通过javascript和ajax以及Angular之类的库为您绑定数据。
[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();
        }