如何从循环中创建的html文本字段中获取值?

时间:2015-03-26 16:15:32

标签: c# html asp.net-mvc-5

对于我们需要建立网上商店的学校项目,我们有一个数据库,其中包含产品及其名称/价格/更多资料。通过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

1 个答案:

答案 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.editorextensions.editorfor%28v=vs.118%29.aspx

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视图引擎,而不是手动构建这些表单列表。

此外,您的表单标记似乎没有操作属性,因此它不会将数据发布到正确的网址