ASP.NET MVC BeginCollectionItem issue
本文关键字:issue BeginCollectionItem MVC NET ASP | 更新日期: 2023-09-27 18:30:32
我在使用 HTML 帮助程序BeginCollectionItem
时遇到问题。它似乎将项目绑定到视图,但更改未传播。
我有一个部分视图,绑定到它的模型是一个IEnumerable
.下面是一个片段。
<tbody>
@foreach (var entry in Model) {
<tr>
@using (Html.BeginCollectionItem("EditedEntries")) {
<td>@entry.Storeid</td>
<td>@entry.district</td>
<td>@Html.EditorFor(x => entry.AdjHrs)</td>
}
</tr>
}
</tbody>
如果我删除foreach
它可以工作,但是我需要使用foreach
,因为集合与表及其成员一起从 Ajax 调用返回到部分视图。
BeginCollectionItem
设计为使用部分视图。为您的模型创建一个(我假设它命名为MyModel
,您将部分命名为"_MyModel.cshtml"
)
@model MyModel
<tr>
@using (Html.BeginCollectionItem("EditedEntries"))
{
<td>@Html.DisplayFor(m => m.Storeid)</td>
<td>@Html.DisplayFor(m => m.district)</td>
<td>@Html.EditorFor(m => m.AdjHrs)</td>
}
</tr>
然后在您的另一个部分中,将foreach
循环替换为
<tbody>
@foreach (var entry in Model)
{
@Html.Partial("_MyModel", entry)
}
</tbody>
所以我设法找到了问题的原因。HTML 帮助程序尝试变得智能并自动生成与数据关联的隐藏字段的 ID 和名称。
生成了什么
<tr role="row" class="odd">
<input type="hidden" name="EditedEntries.index" autocomplete="off" value="a2a18da0-528f-4b10-92c1-4a8ba7038dde">
<td class="sorting_1">1</td>
<td>1</td>
<td>
<input data-val="true" data-val-number="The field AdjHrs must be a number." data-val-required="The AdjHrs field is required."
id="EditedEntries_a2a18da0-528f-4b10-92c1-4a8ba7038dde__entry_AdjHrs" name="EditedEntries[a2a18da0-528f-4b10-92c1-4a8ba7038dde].entry.AdjHrs" type="text" value="0">
</td>
它需要什么
<tr role="row" class="odd">
<input type="hidden" name="EditedEntries.index" autocomplete="off" value="a2a18da0-528f-4b10-92c1-4a8ba7038dde">
<td class="sorting_1">1</td>
<td>1</td>
<td>
<input data-val="true" data-val-number="The field AdjHrs must be a number." data-val-required="The AdjHrs field is required."
id="EditedEntries_a2a18da0-528f-4b10-92c1-4a8ba7038dde_AdjHrs" name="EditedEntries[a2a18da0-528f-4b10-92c1-4a8ba7038dde].AdjHrs" type="text" value="0">
</td>
所以它在标识符前面加上了"foreach"的变量名,我可能只需要编写自己的助手。当我这样做时,我会回帖。