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