Razor Pages Model Binding Список объектов с неработающим индексом - PullRequest
0 голосов
/ 28 февраля 2019

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

Разметка, которую я создаю, выглядит примерно так:

<table>
    <tbody>
        <tr>
            <input type="text" name="devices[0].id"  value="8574" />
            <input type="text" name="devices[0].type"  value="Type1" />
        </tr>
        <tr>
            <input type="text" name="devices[1].id"  value="4385" />
            <input type="text" name="devices[1].type"  value="Type2" />
        </tr>
        <tr>
            <input type="text" name="devices[2].id"  value="9486" />
            <input type="text" name="devices[2].type"  value="Type1" />
        </tr>
        ...
    </tbody>
</table>

и моя модель привязки выглядит так:

public IActionResult OnPostSave(List<Device> devices){
    // ... do something
}

теперь я позволяю пользователю манипулироватьданные формы, просто удаляя строки из таблицы с помощью javascript, а затем отправляя обновленную форму на мой OnPostSave().Теперь, когда, например, строка с идентификатором «4385» удалена, все элементы после этой строки не будут связаны.Что касается этой записи от Скотта Хансельмана, это абсолютно имеет смысл, но мне интересно, есть ли способ обойти это?Желательно без изменения формы в js перед отправкой на сервер.

Заранее спасибо!

1 Ответ

0 голосов
/ 28 февраля 2019

Непоследовательные индексы поддерживаются связывателем модели.Вы должны использовать явный индекс, который обозначается скрытым полем с именем propertyname.Index для каждого элемента в коллекции.Я буду использовать значение ключа устройства из вашего примера для иллюстрации, но значение индекса может быть любым, включая строки, направляющие и т. Д .:

    <tr>
        <input type="hidden" name="devices.Index" value="8574" />
        <input type="text" name="devices[8574].id"  value="8574" />
        <input type="text" name="devices[8574].type"  value="Type1" />
    </tr>
    <tr>
        <input type="hidden" name="devices.Index" value="4385" />
        <input type="text" name="devices[4385].id"  value="4385" />
        <input type="text" name="devices[4385].type"  value="Type2" />
    </tr>
    <tr>
        <input type="hidden" name="devices.Index" value="9486" />
        <input type="text" name="devices[9486].id"  value="9486" />
        <input type="text" name="devices[9486].type"  value="Type1" />
    </tr>

Подробнее о привязке к коллекциям можно прочитать, используя последовательные и непоследовательные индексы здесь: https://www.learnrazorpages.com/razor-pages/model-binding#binding-complex-collections

...