在没有重复 ID 的控件中呈现项目集合时出现问题
Problems rendering a collection of items in controls without duplicate IDs
我正在使用一组数据项填充 HTML table。
但我希望每个单元格都是 editable。所以我在控件中显示项目字段。例如:
@foreach (FleetRailcarDto railcar in editSection.Railcars)
{
<tr>
<td></td>
<td>
<select asp-for="@railcar.FleetId" asp-items="@Model.FleetOptions" class="form-control-sm edit-fleet-id">
</select>
</td>
<td>
<select asp-for="@railcar.Ownership" asp-items="@Model.OwnershipOptions" class="form-control-sm edit-ownership">
</select>
</td>
<td>
<input asp-for="@railcar.CarType" class="form-control-sm edit-cartype" />
</td>
</tr>
}
这显示正常,但它为每个 table 行生成相同的 ID 属性。
我知道我可以手动构建 HTML,但这里需要做一些事情。有没有人找到一种方法来将 asp-for
用于相同 属性 的变体而不导致重复的 ID 属性?
绑定到集合进行编辑时,您应该使用 for
循环而不是 foreach
循环来迭代集合。这样你就可以生成一个索引器来将字段分组在一起。您还需要一个隐藏字段设置为每个项目的标识值:
@for (var i = 0; i < editSection.Railcars.Count;i++)
{
<tr>
<td>
<input type="hidden" asp=for="editSection.Railcars[i].Id" />
</td>
<td>
<select asp-for="@editSection.Railcars[i].FleetId" asp-items="@Model.FleetOptions" class="form-control-sm edit-fleet-id">
</select>
</td>
<td>
<select asp-for="@editSection.Railcars[i].Ownership" asp-items="@Model.OwnershipOptions" class="form-control-sm edit-ownership">
</select>
</td>
<td>
<input asp-for="@editSection.Railcars[i].CarType" class="form-control-sm edit-cartype" />
</td>
</tr>
}
更多信息在这里:https://www.learnrazorpages.com/razor-pages/model-binding#binding-complex-collections
我正在使用一组数据项填充 HTML table。
但我希望每个单元格都是 editable。所以我在控件中显示项目字段。例如:
@foreach (FleetRailcarDto railcar in editSection.Railcars)
{
<tr>
<td></td>
<td>
<select asp-for="@railcar.FleetId" asp-items="@Model.FleetOptions" class="form-control-sm edit-fleet-id">
</select>
</td>
<td>
<select asp-for="@railcar.Ownership" asp-items="@Model.OwnershipOptions" class="form-control-sm edit-ownership">
</select>
</td>
<td>
<input asp-for="@railcar.CarType" class="form-control-sm edit-cartype" />
</td>
</tr>
}
这显示正常,但它为每个 table 行生成相同的 ID 属性。
我知道我可以手动构建 HTML,但这里需要做一些事情。有没有人找到一种方法来将 asp-for
用于相同 属性 的变体而不导致重复的 ID 属性?
绑定到集合进行编辑时,您应该使用 for
循环而不是 foreach
循环来迭代集合。这样你就可以生成一个索引器来将字段分组在一起。您还需要一个隐藏字段设置为每个项目的标识值:
@for (var i = 0; i < editSection.Railcars.Count;i++)
{
<tr>
<td>
<input type="hidden" asp=for="editSection.Railcars[i].Id" />
</td>
<td>
<select asp-for="@editSection.Railcars[i].FleetId" asp-items="@Model.FleetOptions" class="form-control-sm edit-fleet-id">
</select>
</td>
<td>
<select asp-for="@editSection.Railcars[i].Ownership" asp-items="@Model.OwnershipOptions" class="form-control-sm edit-ownership">
</select>
</td>
<td>
<input asp-for="@editSection.Railcars[i].CarType" class="form-control-sm edit-cartype" />
</td>
</tr>
}
更多信息在这里:https://www.learnrazorpages.com/razor-pages/model-binding#binding-complex-collections