对于我们需要建立网上商店的学校项目,我们有一个数据库,其中包含产品及其名称/价格/更多资料。通过foreach循环,我创建了一个表:
<form action="sendStuff">
<table>
@foreach (Product p in Model)
{
<tr>
<td><a href="ShowProduct?productName=@p.productName">@p.productName</a></td>
<td>@p.price</td>
<td><input id="@p.productName" type="number" name="p.productName" value="0"/></td>
</tr>
}
</table>
//this is where i want to submit the values to my controller, but how??
<input type="submit" value="Make Order Now">
</form>
由于产品来自数据库并且数据库中的产品数量不是最终的,我不能给它们id="something123"
,因为所有输入具有相同的ID,因为我将它们放在循环中。这就是为什么我选择制作id="@p.productName"
。
我的问题是如何向控制器提供所需的信息,在这种情况下是输入字段的值,我还需要知道哪个值属于表中的哪一行(可以使用索引?)
我也尝试将它们全部放在arrayList中,但是我仍然无法通过按下按钮来弄清楚如何将它们推送到控制器。
如果您需要我的项目中的任何代码或任何详细信息,请告诉我:D
答案 0 :(得分:0)
您将需要使用绑定到您正在编辑的模型的强类型视图。
在您的情况下,您可以使用Html.EditorFor(model =&gt; model.Products),它将在Products / EditorTemplates文件夹中引用名为Products.cshtml的文件。此Products.cshtml将包含Html.TextBoxFor和其他HtmlHelper函数,以便为您的产品列表构建表单。控制器不必依赖您在表单视图中手动创建产品列表。
https://msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions(v=vs.118).aspx
<强>更新强>
如果要将对象列表发布到控制器,则要发布到的方法必须将其作为参数接受。
public ActionResult EditProducts(List<Product> products) {}
因此,对于您的视图,您需要迭代您的集合,以便将正确的HTTP Post数组生成回控制器
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.TextBox("product[" + @i + "].ID", Model[i].ID)
</td>
</tr>
}
这是创建一个回发到控制器的数组的手动方式,我之前提到的将把这个工作负载提供给Razor视图引擎,而不是手动构建这些表单列表。
此外,您的表单标记似乎没有操作属性,因此它不会将数据发布到正确的网址