Вторые параметры не передаются в контроллер (ViewModel) - PullRequest
3 голосов
/ 12 июня 2019

Я довольно новичок в программировании, и я застрял с этой проблемой ниже.

Я пытаюсь передать 2 значения моему контроллеру: «Id» и «количество».

«id» поражает контроллер, как и предполагалось. но я не могу сказать то же самое для «количества».

По существу, количество является / должно быть текстовым полем, в котором пользователь добавляет количество. Результат для количества достигает контроллера как NULL или 0 (ноль).

Это будет использоваться для корзины покупок, которую я пытаюсь настроить. Где я могу получить идентификатор для продукта и количество.

Я пробовал использовать бритву, но данные, введенные пользователем для количества, не передаются контроллеру. Я уверен, что передал 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"}) 

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Если вы хотите, чтобы он работал после публикации формы:

<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">

У вас уже есть маршрут и данные готовы в форме.ActionLink будет переходить к действию, а не публиковать форму.

0 голосов
/ 12 июня 2019

вам не хватает name property.it должно выглядеть примерно так:

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

Примечание: - значение свойства name должно соответствовать параметруназвание действия в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...