我有多个"数量"文本框,如何发布所有文本框的值

时间:2015-08-23 19:03:08

标签: c# asp.net-mvc-4

如何获取输入的文本框值以使用值发布到我的控制器。想到使用数组但不知道从哪里开始。文本框是动态的,因为每个都有计数器编号

 @{
                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; }
}

我还没有实现方法,试图找出如何首先发布所有值。

1 个答案:

答案 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操作中从数据库中检索它们。