1

我有一个模型:

public class MyModel
{
    public List<Location> Locations { get; set; }
}

假设在列表中我们有 3 个项目。然后我使用 EditorFor 生成位置的 html:

@Html.EditorFor(a => a.Locations)

第二个位置已从 html 中删除(通过 javascript,我将此位置的标志标记为已删除)

在我从位置列表中删除的操作中删除位置

model.Locations.RemoveAll(a => a.IsDeleted);

然后我生成具有如下内容的新视图:

@for (int locationIndex = 0; locationIndex < Model.Locations.Count; locationIndex++)
{
    @Html.HiddenFor(m => Model.Locations[locationIndex].Address) <br />
    @Html.HiddenFor(m => Model.Locations[locationIndex].LocationType) <br />
}

虽然我不敢相信!当我查看生成的 html 代码时,我看到我从位置列表位置中删除,所以我看到两个位置,第一个和第二个。但不是第一和第三

请帮助我从未在 MVC 中看到过这种行为。我做错了什么?

重要更新:一旦我用简单的 html 替换 @Html.HiddenFor ,它就可以工作了。

    @for (int locationIndex = 0; locationIndex < Model.Locations.Count; locationIndex++)
    {
        <input type="hidden" name="Locations[@locationIndex].Address" value="@Model.Locations[locationIndex].Address" />
        <input type="hidden" name="Locations[@locationIndex].LocationType" value="@Model.Locations[locationIndex].LocationType" />
    }
4

2 回答 2

1

我已经修复了它,但是用这样的简单 html 替换了 Html 助手:

 @for (int locationIndex = 0; locationIndex < Model.Locations.Count; locationIndex++)
    {
        <input type="hidden" name="Locations[@locationIndex].Address" value="@Model.Locations[locationIndex].Address" />
        <input type="hidden" name="Locations[@locationIndex].LocationType" value="@Model.Locations[locationIndex].LocationType" />
    }
于 2013-10-24T21:39:47.850 回答
0

我也有这个确切的问题。从我的列表中删除项目后,将显示以前删除的条目。您的解决方案为我解决了这个问题,谢谢。

为了帮助澄清:

@Html.HiddenFor(m => Model[i].id)

导致问题,但通过手动创建 html 标记:

<input type="hidden" name="[@i].Id" value="@Model[i].Id" />

导致删除的字段仍然被删除。

于 2018-06-15T22:32:36.303 回答