У меня есть модель:
public class MyModel
{
public List<Location> Locations { get; set; }
}
Допустим, в списке у нас есть 3 пункта. Затем я генерирую с помощью EditorFor html для местоположений:
@Html.EditorFor(a => a.Locations)
Вторая локация была удалена из html (яваскриптом помечаю эту локацию как удаленную)
В Акции удаляю из списка локаций удаленную локацию
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.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" />
}
model.Locations.RemoveAll(a => a.IsDeleted);
Эта строчка кода - это действие поста вашего контроллера? Обновляется ли объект Locations, как вы ожидаете, когда вы перешагиваете через него? - person User   schedule 23.08.2013