与old one一样,这是一个问题,但在以前的问题中,其原因被标记为答案。
我的页面中有一个包含多个项目的表单。每个项目都包含一些元素,因此它们的名称是重复的。
<form ...>
.....
<table class="details">
<thead>
<tr>
<th>Prop1</th>
<th>Prop2</th>
</tr>
</thead>
<tbody>
@foreach(var item in Model.Items)
{
@await Html.PartialAsync("partial-view-name", detail)
}
</tbody>
</table>
...
</form>
部分
....
<tr>
<td><input asp-for="Prop1" /></td>
<td><input asp-for="Prop2" /></td>
</tr>
如上所述here,这是设计的行为,但我想知道是否有任何方法可以覆盖它。
我认为您的问题是如何将每个对象渲染到屏幕上。如果您应用下面的逻辑,则它应该正确呈现,并且在提交时也可以正确绑定回列表。
@for (int i=0; i< Model.Items.Count; i++)
{
<div class="text-center">
<label asp-for="@Model.Items[i].Prop1"></label>
<input asp-for="@Model.Items[i].Prop1" />
<label asp-for="@Model.Items[i].Prop2"></label>
<input asp-for="@Model.Items[i].Prop2" />
</div>
}
我找到了在HTML字段中添加前缀的解决方案,因此名称在迭代中会有所不同。
@{ ViewData.TemplateInfo.HtmlFieldPrefix = Model.ID; }
<tr>
<td><input asp-for="Prop1"/></td>
<td><input asp-for="Prop2"/></td>
</tr>