0

这是一个与旧问题一样的问题,但在旧问题中,其原因被标记为答案。

我的页面,有一个包含多个项目的表单。每个项目都包含一些元素,因此它们的名称是重复的。

<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>

正如这里提到的,这是设计的行为,但我想知道是否有任何方法可以覆盖它。

4

2 回答 2

0

我认为您的问题是如何将每个对象渲染到屏幕上。如果您应用下面的逻辑,它应该会正确呈现并在提交时正确绑定回列表。

@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>
}
于 2020-01-23T15:18:33.727 回答
0

我找到了一个向 HTML 字段添加前缀的解决方案,因此名称在迭代中会有所不同。

@{ ViewData.TemplateInfo.HtmlFieldPrefix = Model.ID; }
<tr>
   <td><input asp-for="Prop1"/></td>
   <td><input asp-for="Prop2"/></td>
</tr>
于 2020-01-29T17:25:32.777 回答