我有一个标准的 Razor 页面,其中列出了我的数据库中的所有订单。它的编码非常标准:IList<Order>
页面模型中的绑定属性,OnPost方法。但是,表中的每条记录都有一个列,其中包含select显示订单当前状态的元素,以及button如果用户决定更改它,则保存新状态。对每行状态进行内联编辑。
所以我有一个foreach在我的页面中循环遍历我的所有订单:
@foreach (var item in Model.Orders)
{
<tr><td>...</td></tr>
<tr>
<td>
<form method="post" class="form-inline">
<input type="hidden" value="@item.Id"/>
<select asp-for="@item.OrderStatusId"
class="form-control form-control-sm"
asp-items="ViewBag.OrderStatusId"></select>
<button type="submit" class="btn btn-secondary btn-sm">
<i class="fas fa-save"></i>
</button>
</form>
</td>
</tr>
}
如您所见,最后一列是form。我想做的是能够服从我的OnPost方法,订单id(隐藏input表单中的元素)和选定状态(select在元素形式中)。但是,这些参数在方法中始终显示为 null。我猜这与以下事实有关,因为有多个asp-for相同属性名称的元素(每个表单一个 - 每个订单/行),Razor 会感到困惑并且不知道要发送哪一个。
有没有解决的办法?
The foreach
你的例子中的循环生成相同的name
属性为<select>
元素,这解释了为什么 Razor 会感到困惑(而且它也是无效的 HTML)。假设Model.Orders
实施IEnumerable
,你应该使用for
每次迭代的循环和数字索引生成不同的<select>
元素名称:
<form method="post" class="form-inline">
@for (int i = 0; i < Model.Orders.Count; i++)
{
<tr><td>...</td></tr>
<tr>
<td>
<input type="hidden" value="@item.Id"/>
<select asp-for="Model.Orders[i].OrderStatusId" class="form-control form-control-sm"
asp-items="ViewBag.OrderStatusId"></select>
</td>
</tr>
}
<button type="submit" class="btn btn-secondary btn-sm">
<i class="fas fa-save">Save</i>
</button>
</form>
Note:我故意把<form>
& 提交<button>
标签在循环之外,因为不需要创建多个<form>
标签(和多个提交按钮)无需设置action
里面的属性for
循环,除非另有说明。
类似问题:如何使用 asp-for 标签绑定数组?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)