如何将数据发布到asp.net核心背后的剃须刀页面代码

时间:2018-06-19 13:57:50

标签: c# razor asp.net-core razor-pages

我想实现批量操作功能,但是我无法将数据发布到后面的剃刀页面代码中,有人可以提供帮助吗?请在下面检查我的代码

 <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 个答案:

答案 0 :(得分:0)

您需要以一种方式呈现产品,以便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);
}