Mvc Core:为重复名称生成一次验证属性

Mvc Core: Validation attributes are generated once for dublicated names

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

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

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