#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
.