Привязка модели MVC к списку - Потерянные предметы - PullRequest
2 голосов
/ 03 апреля 2012

Допустим, есть следующая модель

public class FirstModel
{
    public List<SecondModel> SecondModels { get; set; }
}

public class SecondModel
{
    public string Value { get; set; }
}

И это представление

@model FirstModel

....
<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[1].Value" value="test2"/>
<input name="SecondModels[2].Value" value="test3"/>
...

Привязка модели работает хорошо.Я получаю полную модель для моего ActionMethod.

Но , если я удаляю элемент посередине, используя, например, jQuery.

<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[2].Value" value="test3"/>

я потерял SecondModels[2] потому что ModelBinder не может связать.Итак, я получаю только первое («test1»).

Есть ли другой синтаксис или CustomModelBinder, который может правильно связать это, или мне нужно заменить имена input после удаления элемента?

Большое спасибо заранее!

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Вы можете использовать Функция связывания непоследовательной модели ASP.NET MVC здесь. В вашем случае вам нужно что-то следующее:

<input type="hidden" name="SecondModels.Index" value="0" />
<input name="SecondModels[0].Value" value="test1"/>

<input type="hidden" name="SecondModels.Index" value="2" />
<input name="SecondModels[2].Value" value="test3"/>

Для получения дополнительной информации, пожалуйста, посмотрите Непоследовательные индексы часть поста Фила Хаака в блоге:

привязка модели к списку

0 голосов
/ 03 апреля 2012

Я сталкивался с этим в прошлом проекте ...

Моим быстрым и грязным решением было переиндексировать список элементов с соответствующими значениями.

Итакthis:

<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[1].Value" value="test2"/>
<input name="SecondModels[2].Value" value="test3"/>
<input name="SecondModels[3].Value" value="test4"/>
<input name="SecondModels[4].Value" value="test5"/>

Становится так (при удалении индексов 1 и 3):

<input name="SecondModels[0].Value" value="test1"/>
<input name="SecondModels[1].Value" value="test3"/>
<input name="SecondModels[2].Value" value="test5"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...