MVC / Razor модель связывания коллекций, когда элемент отсутствует - PullRequest
6 голосов
/ 13 сентября 2011

У меня есть форма, которая содержит список текстовых полей переменной длины, отображаемых с использованием шаблона, подобного этому.

 @Html.TextBox("items[" + itemIndex + "].Title", someValue)

Итак, окончательно отрендеренный HTML выглядит примерно так ...

<input id="items_0__Amount" type="text" value="Apple" name="items[0].Title">
<input id="items_1__Amount" type="text" value="Banana" name="items[1].Title">
<input id="items_2__Amount" type="text" value="Orange" name="items[2].Title">

При отправке формы это отлично связывается с моей моделью. Тем не менее, у меня есть кнопка удаления, которая использует Javascript для удаления одной или нескольких строк из формы. Проблема в том, что если вы удалите, скажем, среднюю строку, HTML будет выглядеть так ...

<input id="items_0__Amount" type="text" value="Apple" name="items[0].Title">
<input id="items_2__Amount" type="text" value="Orange" name="items[2].Title">

... и индексы больше не являются смежными. Это, кажется, сбивает с толку MVC, и моя модель связующего проходит только первый ряд, а не последний. Я сделал что-то не так, или MVC просто не работает, если индексы в списках не являются смежными? Как лучше всего решить эту проблему?

Я хочу избегать использования JS для повторной индексации всего, если это возможно.

Спасибо!

1 Ответ

5 голосов
/ 13 сентября 2011

Фил Хаак писал в блоге о чем-то похожем на это некоторое время назад, хотя я не уверен, имеет ли это отношение к MVC 3. В посте есть обходной путь для проблемы непоследовательного индекса -

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

...