私はモデルを持っています:
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" />
}