MVC неправильно отображает вложенную коллекцию

#asp.net-mvc #razor

#asp.net-mvc #razor

Вопрос:

У меня есть Razor view, отображающий вложенную коллекцию, которая включает следующий код…

 <td>
    @Html.TextBoxFor(x => x.Fitments[i].AncillaryProducts[ai].Description)  
    @Model.Fitments[i].AncillaryProducts[ai].Description
</td>
  

При этом должно появиться окно редактирования, за которым следует текст значения полей редактирования, но результирующий html является…

 <td>
  <input name="Fitments[0].AncillaryProducts[0].Description" class="valid" id="Fitments_0__AncillaryProducts_0__Description" aria-invalid="false" type="text" value="Valve (alloy/mobile)"> 
  Valve (alloy/center)
</td>
  

Где значение текстовых полей «Valve (alloy / mobile)» явно отличается от фактического значения «Valve (alloy / center)». Как это вообще возможно?

Представление отправляется в метод action, где AncillaryProducts очищен…

 foreach (var fitment in model.Fitments)
    fitment.AncillaryProducts.Clear();
  

Затем добавляются (разные) вспомогательные продукты…

 fitment.AncillaryProducts.Add(new JobCardAncillaryProduct() { Description = p.Description });        
  

TextBoxFor отображает предыдущее значение этой записи массива, а Razor отображает текущее значение.

Любая помощь приветствуется.

Комментарии:

1. Покажите свой код действия. Кроме того, происходит ли это при обычном запросе GET или только после отправки view-model обратно в действие?

2. Модель отправлена обратно, но у GET та же проблема. Я обновил вопрос с помощью кода действия.

3. @Html.TextBoxFor (и другое для помощников ) используйте отражение (деревья выражений) для получения значений данных, но оно поддерживает только ограниченное индексирование массива. Вам нужно упростить модель, чтобы использовать одномерные массивы, или переключиться на ввод текстовых полей без TextBoxFor .