razor - Razor Page 中的 foreach 循环内的表单

标签 razor asp.net-core

我有一个标准的 Razor 页面,其中列出了我数据库中的所有订单。它的编码非常标准:IList<Order>页面模型中的绑定(bind)属性, OnPost 方法。但是,表中的每条记录都有一个带有 的列。选择 显示订单当前状态的元素,以及 按钮 如果用户决定更改它,则保存新状态。每行状态的内联编辑排序。

Form Preview

所以我有一个 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>
}

如您所见,最后一列是 表格 .我想做的是能够提交到我的 OnPost 方法、订单 ID(隐藏 输入 表单中的元素)和选中状态( 选择 表单中的元素)。但是,这些参数在方法中始终显示为 null。我猜这与以下事实有关,因为有多个 asp-for 具有相同属性名称的元素(每个表单一个 - 每个订单/行),Razor 会感到困惑,不知道要发送哪个。

有没有解决的办法?

最佳答案

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>

注:我特意放了<form> & 提交 <button>循环外的标签,因为没有必要创建多个 <form>标签(和多个提交按钮)无需设置 action里面的属性for循环,除非另有说明。

类似问题:How can I bind an array with asp-for tag?

关于razor - Razor Page 中的 foreach 循环内的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52157469/

相关文章:

c# - 模拟 SignInManager

azure - 如何在Azure表客户端中应用过滤器

c# - 将 Razor View 返回到 Iframe

jquery - 悬停对井内表格的影响

c# - 如何使用 ForNpgsqlUseXminAsConcurrencyToken 创建的 EF Core 并发 token

c# - 使用托管标识从 Azure 应用服务调用图

.net - 使用 Angular 2 和 WebAPI 进行社交登录

jquery - 如何显示彼此对齐的自定义数据表过滤器?

c# - 在 javascript/razor 应用程序中按名称获取值

asp.net-mvc - 安装 MVC 4 后 Razor View 中没有智能感知 - 尝试了各种解决方案