第二个参数没有传递给 Controller (ViewModel)
Second parameters not passing to Controller (ViewModel)
我对编程还很陌生,但遇到了下面的问题。
我正在尝试将 2 个值传递给我的控制器,"Id" 和 "quantity"。
"id" 正在按预期击中控制器。但我不能对 "quantity".
说同样的话
基本上,数量 is/should 是用户添加数量的文本框。数量的结果以 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"})
如果你想让它在表单 post 之后工作:
<input type="number" value="@item.Quantity" />
更改为:
<input name="qty" type="number" value="@item.Quantity" />
请注意您的 Form
标签 (/Order/AddToCart) 和 ActionLink
(/AddToCart/Add)。它们是不同的,可能不会是相同的控制器操作。
仅供参考 - 你应该有一个 submit
按钮而不是 ActionLink
到 post 表单:
<input type="submit" value="Add">
您已经在表格中准备好路线和数据。
ActionLink
将导航到操作而不是 post 表单。
您缺少 名称 property.it 应该是这样的。
<input type="number" name="qty" value="@item.Quantity" />
注意:- 名称 属性 的值应与控制器中操作的参数名称匹配。
我对编程还很陌生,但遇到了下面的问题。
我正在尝试将 2 个值传递给我的控制器,"Id" 和 "quantity"。
"id" 正在按预期击中控制器。但我不能对 "quantity".
说同样的话基本上,数量 is/should 是用户添加数量的文本框。数量的结果以 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"})
如果你想让它在表单 post 之后工作:
<input type="number" value="@item.Quantity" />
更改为:
<input name="qty" type="number" value="@item.Quantity" />
请注意您的 Form
标签 (/Order/AddToCart) 和 ActionLink
(/AddToCart/Add)。它们是不同的,可能不会是相同的控制器操作。
仅供参考 - 你应该有一个 submit
按钮而不是 ActionLink
到 post 表单:
<input type="submit" value="Add">
您已经在表格中准备好路线和数据。
ActionLink
将导航到操作而不是 post 表单。
您缺少 名称 property.it 应该是这样的。
<input type="number" name="qty" value="@item.Quantity" />
注意:- 名称 属性 的值应与控制器中操作的参数名称匹配。