1

私はモデルを持っています:

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

リストに 3 つの項目があるとします。次に、場所の html を EditorFor で生成します。

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

2 番目の場所は 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 コードを見ると、ロケーション リストのロケーションから削除されていることがわかります。そのため、最初と 2 番目の 2 つのロケーションが表示されます。しかし、最初と3番目ではありません

MVC からこの動作を見たことがありません。私が間違っていることは何ですか?

重要な更新: @Html.HiddenFor を単純な 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" />
    }
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 に答える