如何获取输入的文本框值以使用值发布到我的控制器。想到使用数组但不知道从哪里开始。文本框是动态的,因为每个都有计数器编号
@{
var counter = 0;
foreach (var addedProduct in Model)
{
counter++;
<tr class="default" data-ng-controller="deleteItemsController">
<td>@addedProduct.name</td>
<td>@addedProduct.price</td>
<td>
<input type="text" id="quantity_@counter" name="quantity_@counter"/>
</td>
</tr>
}
}
<tr>
<td><b>Total:</b>{{@ViewBag.total}}</td>
<td>
@using (Html.BeginForm("Index", "Payment"))
{
//how do i get quantity values//
<input type="submit" value="pay">
}
</td>
我的模特:
public class ProductVar
{
public int productID { get; set; }
public string name { get; set; }
public int price { get; set; }
public int quantity { get; set; }
public int total { get; set; }
}
我还没有实现方法,试图找出如何首先发布所有值。
答案 0 :(得分:2)
你非常接近。阅读Phil Haack的this blog post
,你的输入字段应该如何命名。您将了解模型绑定在ASP.NET MVC中的工作原理。
此外,您应将<input>
字段放在HTML <form>
中,否则在提交此表单后,任何内容都不会发送到服务器。
首先修改您的视图代码,以便使用强类型HTML帮助程序生成输入字段。他们会把汽车正确地命名为:
@using (Html.BeginForm("Index", "Payment"))
{
for (var i = 0; i < Model.Count; i++)
{
<tr class="default" data-ng-controller="deleteItemsController">
<td>@Html.DisplayFor(x => x[i].name)</td>
<td>@Html.DisplayFor(x => x[i].price)</td>
<td>
@Html.EditorFor(x => x[i].quantity)
</td>
</tr>
}
<tr>
<td>
<b>Total:</b>
@ViewBag.total
</td>
<td>
<input type="submit" value="pay" />
</td>
</tr>
}
现在,您可以在提交表单时触发控制器操作:
[HttpPost]
public ActionResult Index(ProductVar[] model)
{
...
}
在此示例中,只有模型的quantity
字段将发送到服务器,因为这是HTML表单中唯一的输入字段,因此发送到服务器的唯一值。如果要绑定其他值,也可以将它们包含在隐藏字段中:
@Html.HiddenFor(x => x[i].name)
@Html.HiddenFor(x => x[i].price)
当然,在大多数情况下,这是不好的做法,因为用户可以操纵这些值。最好的方法是使用您在用于呈现此表单的GET操作中检索它们时使用的相同ID,在POST操作中从数据库中检索它们。