haacked.com/archive/2011/01/06/...
жу за публикацией в блоге Стивена СандерсонаВот создать редактируемый список с переменной длиной элементов. В своем посте он использует div для отображения нового элемента в списке, но я использую таблицу. Таким образом, мое частичное представление для каждого элемента представляет собой тег tr с различными полями для редактирования. Прямо сейчас мой частичный вид выглядит примерно так:
<tr>
@using (Html.BeginCollectionItem("LineItems"))
{
<td>
@Html.TextBoxFor(m => m.Description)
@Html.ValidationMessageFor(m => m.Description)
</td>
<td>
@Html.TextBoxFor(m => m.Quantity)
@Html.ValidationMessageFor(m => m.Quantity)
</td>
<td>
@Html.TextBoxFor(m => m.Amount)
@Html.ValidationMessageFor(m => m.Amount)
</td>
}
</tr>
Это на самом деле корректно отображается во всех браузерах, которые я тестировал, но проблема в том, что это действительно генерирует недопустимый HTML, так как он размещает скрытый тег ввода сразу после открывающего тега tr.
<tr>
<input type="hidden" name="LineItems.index" .... />
<td>
...
</td>
...
</tr>
В связанном сообщении есть комментарий другого пользователя, в котором говорится, что вы можете переместить оператор using в первый тег, и он работает, но я не смог заставить его работать, используя ASP.NET MVC 3 и механизм просмотра Razor.
У кого-нибудь есть идеи, как использовать логику, представленную Стивеном Сандерсоном, но получить скрытое поле ввода индекса внутри первого тд, чтобы не генерировать недопустимый HTML?
Спасибо