我想实现批量操作功能,但是我无法将数据发布到后面的剃刀页面代码中,有人可以提供帮助吗?请在下面检查我的代码
<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)
{
}
答案 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);
}