Partial View submit возвращает ноль в контроллер - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь создать страницу заказа, где клиенты могут поставить галочку, если они хотят арендовать товар. Моя ViewModel содержит OrderId и IList статей, которые содержат ArticleId среди других параметров. Я пытаюсь вернуть OrderId и все ArticleId из отмеченных флажков на мой контроллер. OrderId попадает в контроллер без проблем, но IList of Articles всегда возвращает ноль.

Это представление:

@model ViewModelOrder
@{
    ViewData["Title"] = "OrderCreateChooseArticles";
}

<h1>Choose products</h1>

<form method="post" asp-controller="Order" asp-action="OrderConfirmation">
    <button type="submit" class="btn btn-success">Create order</button>

    <input type="text" type="hidden" asp-for="orderid" class="form-control" id="OrderId" readonly="readonly">

    <table class="table table-striped" style="margin-top: 20px">
        <thead>
            <tr>
                <th scope="col">Id</th>
                <th scope="col">Name</th>
                <th scope="col">Description</th>
                <th scope="col">Manufacturer</th>
                <th scope="col">Publisher</th>
                <th scope="col">Rental Days</th>
                <th scope="col">Available</th>
                <th scope="col">Ckeck</th>
                <th scope="col"></th>
            </tr>
        </thead>
        <tbody>
        @foreach (var productResult in Model.products)
            {
                <partial name="ProductPartial" model="productResult" />
            }
        </tbody>
    </table>
    <button type="submit" class="btn btn-success">Create order</button>
</form>

И это частичное представление ProductPartial :

@model VivesRental.Repository.Results.ProductResult


<tr>
    <td>@Model.Id</td>
    <td>@Model.Name</td>
    <td>@Model.Description</td>
    <td>@Model.Manufacturer</td>
    <td>@Model.Publisher</td>
    <td>@Model.RentalExpiresAfterDays</td>
    <td>
        @if (@Model.NumberOfAvailableArticles >= 5)
        {
            <span class="badge badge-success badge-pill"> @Model.NumberOfAvailableArticles articles available</span>
        }
        else if (@Model.NumberOfAvailableArticles >= 1 && @Model.NumberOfAvailableArticles <= 4)
        {
            <span class="badge badge-warning badge-pill"> @Model.NumberOfAvailableArticles articles available</span>
        }
        else
        {
            <span class="badge badge-danger badge-pill"> @Model.NumberOfAvailableArticles articles available</span>
        }
    </td>
    <td>
        <div class="form-check">
            <input class="form-check-input" type="checkbox" value="@Model.Id" id="defaultCheck">
        </div>
    </td>
</tr>

Этот метод вызывается в контроллере:

public IActionResult OrderConfirmation(ViewModelOrder vm)
        {
            foreach (var product in vm.products)
            {
                _orderLineService.Rent(vm.orderid, product.Id);
            }
            return View();
        }

А это ViewModel:

public class ViewModelOrder
    {
        public Guid orderid { get; set; }
        public IList<ProductResult> products { get; set; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...