3

我对编程相当陌生,我遇到了下面的问题。

我正在尝试将 2 个值传递给我的控制器,“Id”和“quantity”。

“id”按预期击中控制器。但我不能对“数量”说同样的话。

基本上,数量是/应该是用户添加数量的文本框。数量的结果将控制器作为 NULL 或 0(零)。

这将用于我要设置的购物车。我在哪里获得产品的 ID 和数量。

我试过使用剃须刀,但用户输入的数量数据没有传递给控制器​​。我确信我之前已经传递了 2 个这样的参数,并且我也看到了一些这样的例子。但我很沮丧,我现在不能做这样简单的事情。:(


public class OrderViewModel{
        public IEnumerable<Product> Product { get; set; }
        public IEnumerable<Supplier> Supplier { get; set; }

        public Product product { get; set; }
        public Supplier supplier { get; set; }      

        public int Quantity { get; set; }}}```

Controller

public ActionResult AddToCart(int id, int? qty)
{
}

My view

@using (Html.BeginForm("AddToCart", "Order", FormMethod.Get))
{
    <table class="table table-hover table-striped table-bordered">
        <tr>
            <th> @Html.DisplayNameFor(model => model.product.ProductCode) </th>
            <th> @Html.DisplayNameFor(model => model.product.Description) </th>
            <th> @Html.DisplayNameFor(model => model.product.Image)       </th>
            <th> @Html.DisplayNameFor(model => model.product.Price)       </th>
            <th> Quantity for purchase                                    </th>
            <th> @Html.DisplayNameFor(model => model.supplier.CompanyName)</th>
            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>  @Html.DisplayFor(modelItem => item.product.ProductCode)               </td>
                <td>  @Html.DisplayFor(modelItem => item.product.Description)               </td>
                <td>  @Html.DisplayFor(modelItem => item.product.Image)                     </td>
                <td>  @Html.DisplayFor(modelItem => item.product.Price)                     </td>
                <td>  <input type="number" value="@item.Quantity" />  </td>
                <td>  @Html.DisplayFor(modelItem => item.supplier.CompanyName)              </td>
                <td>
                    @Html.ActionLink("Add", "AddToCart", new { id = item.product.ProductId, qty = item.Quantity }, new { @class = "btn btn-success"})                 
                </td>
            </tr>
        }

    </table>
}

My expectation is that the "quantity" entered by the user, will hit the action on the controller.

**I fixed that by adding that following**

<input type="hidden" name="id" value="@item.product.ProductId" />
<input type="submit" value="Add">

removed the following

 @Html.ActionLink("Add", "AddToCart", new { id = item.product.ProductId, qty = item.Quantity }, new { @class = "btn btn-success"}) 

4

2 回答 2

1

如果您希望它在表单发布后工作:

<input type="number" value="@item.Quantity" />

改成:

<input name="qty" type="number" value="@item.Quantity" />

请注意Form标签 ( /Order/AddToCart ) 和ActionLink( /AddToCart/Add ) 中的控制器名称和操作名称。它们是不同的,可能不会是同一个控制器的动作。

仅供参考 -ActionLink你应该submit在那里有一个按钮来发布表格:

<input type="submit" value="Add">

您已经在表单中准备好路线和数据。AnActionLink将导航到不发布表单的操作。

于 2019-06-12T11:15:43.543 回答
0

您缺少名称属性。它应该是这样的。

<input type="number" name="qty" value="@item.Quantity" />

注意:- name属性的值应与控制器中操作的参数名称匹配。

于 2019-06-12T11:27:49.897 回答