我对helper 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调用返回到部分视图。
发布于 2016-01-16 00:14:46
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>发布于 2016-01-15 22:42:11
所以我设法找出了问题的原因。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”的变量名作为标识符的前缀,我可能只需编写自己的助手。当我回来的时候我会发帖。
https://stackoverflow.com/questions/34820416
复制相似问题