Как разместить данные в коде бритвы за ядром asp.net

Я хочу реализовать функцию массовых операций, но я не могу опубликовать свои данные в коде страницы бритвы, кто-нибудь может помочь? Пожалуйста, проверьте мой код ниже

 <form method="post" asp-page="./Index">
            <div class="row">
                <div class="col-md-12">
                    <table class="table table-hover table-bordered" style="margin-top:15px;">
                        <thead>
                            <tr class="info">
                                <th></th>
                                <th>
                                    <a asp-page="./Index" asp-route-sortOrder="@Model.NumberSort">
                                        @Html.DisplayNameFor(model => model.Products[0].Number)
                                    </a>
                                </th>
                                <th>
                                    @Html.DisplayNameFor(model => model.Products[0].Name)
                                </th>                            
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach (var item in Model.Products)
                            {
                                <tr>
                                    <td>
                                        @Html.CheckBoxFor(modelItem => item.Checked)
                                    </td>
                                    <td class="success">
                                        @Html.DisplayFor(modelItem => item.Number)
                                    </td>
                                    <td>
                                        @Html.DisplayFor(modelItem => item.Name)
                                    </td>                                  
                                    <td>
                                        <a asp-page="./Details" asp-route-id="@item.ID" class="btn btn-info">details</a>
                                        <a asp-page="./Edit" asp-route-id="@item.ID" class="btn btn-warning">edit</a>
                                        <a asp-page="./Delete" asp-route-id="@item.ID" class="btn btn-danger">delete</a>
                                    </td>
                                </tr>
                            }
                        </tbody>
                    </table>
                </div>
            </div>
            <div class="row">
                <div class="col-md-10">    
                    @{
                        var items = Model.Products.Where(x => x.Checked);
                    }
                    <input type="submit" name="bulkUpload" value="bulk upload" asp-route-data="@items"/>
                </div>
            </div>
        </form>


 public async Task OnPostAsync(List<Product> upload)
        {
        }

1 ответ

Вам необходимо визуализировать свои продукты таким образом, чтобы Modelbinder мог их забрать при отправке формы и передать в коде.

Примерно так (сделано вручную, чтобы сначала не компилировалось):

@{
    for (int i = 0; i < Model.Products.Count; i++)
    {
        <input type="checkbox" asp-for="Model.Produtcs[i].Checked" />
        @Model.Products[i].Number
        @Model.Products[i].Name
    }
}

Это сделает HTML как

<input type="checkbox" name="Products[0].Checked" />
<input type="checkbox" name="Products[1].Checked" />
<input type="checkbox" name="Products[2].Checked" />

И это должно вернуться к вашему OnPostAsync. Если нет, попробуйте изменить

public async Task OnPostAsync(List<Product> upload)

в

public async Task OnPostAsync(YourModel model)

Как называется ваша полная модель?

Это тогда избыточно:

@{
    var items = Model.Products.Where(x => x.Checked);
}
Другие вопросы по тегам