Как получить информацию из поля ввода в мой контроллер и создать список с каждым полученным вводом? - PullRequest
0 голосов
/ 12 мая 2019

Я знаю, что этот вопрос может звучать очень глупо, но я пытаюсь создать что-то вроде корзины для покупок. У меня есть список продуктов и поле ввода, где пользователь устанавливает требуемое количество для каждого продукта. Я немного заблокирован тем, как получить входное значение при нажатии кнопки Add to Cart и как создать простую страницу, где я вижу только элементы с требуемым количеством. Любая идея о том, как я могу сделать эти 2 вещи? Вот что мне удалось сделать до сих пор, но по какой-то причине вход WantedQuantity в контроллере всегда равен нулю.

Вот вид:

@using System.Linq
@model IEnumerable<ISS.Models.Drugs>

@{
    ViewData["Title"] = "Product List";
}

<h1>Product List</h1>
@*<p>
        <a asp-action="CheckCart">Check Cart</a>
    </p>*@

<table class="table">
    <thead>
        @*<tr>
            <th>
                @{
                    Html.RenderPartial("_HeaderNavBar");
                }
            </th>
        </tr>
        <tr>*@
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ModificationData)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Quantity)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Price)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.WantedQuantity)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ModificationData)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Quantity)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Price)
                </td>
                <td>
                    <form asp-controller="DrugsUser" asp-action="AddToCart">
                        <input type="text" value="@item.WantedQuantity" />
                        @*<input asp-for="@item.WantedQuantity" class="form-control"/>*@
                    </form>
                </td>
                <td>
                    <a asp-action="AddToCart" asp-route-id="@item.Id">Add To Cart</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a>
                </td>
            </tr>
        }
    </tbody>
</table>

Вот мой метод управления:

        public async Task<IActionResult> AddToCart([Bind("Id,Name,ModificationData,Quantity,Price")] int WantedQuantity, int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
            Order order = new Order();
            var drugs = await _context.Drugs.FindAsync(id);
            if (drugs.Quantity <= WantedQuantity)
            //    var drugs = await _context.Drugs.FindAsync(WantedQuantity);
            //if (drugs.Quantity > WantedQuantity)
            {
                return View("~/Views/Home/CartError.cshtml");
            }
            else
            {

                order.Name = drugs.Name;
                order.Quantity = WantedQuantity;
                order.Price = drugs.Price * WantedQuantity;
                order.ModificationData = DateTime.Now;
                _context.Orders.Add(order);
                await _context.SaveChangesAsync();
            }

            return View(await _context.Orders.ToListAsync());
            //return View();
        }

А вот и моя Order модель:

    public class Order
    {
        public int Id { get; set; }

        [StringLength(60, MinimumLength = 3)]
        [Required]
        public string Name { get; set; }

        [Display(Name = "Last modified date")]
        [DataType(DataType.DateTime)]
        public DateTime ModificationData { get; set; }

        [Required]
        [Range(1, 100)]
        [Display(Name = "Quantity")]
        public int Quantity { get; set; }

        [DataType(DataType.Currency)]
        [Range(1, 300)]
        [Column(TypeName = "decimal(18,2)")]
        public decimal Price { get; set; }
    }

Любая помощь будет высоко оценена.

...