Я помню, что у меня была такая же проблема при запуске, поэтому есть несколько вещей, которые вы можете сделать.Есть решения для них, поэтому я просто напишу общие шаги.
Vanilla JS
Я думаю, что это хорошо для простого решения, если выне очень много со списком.И просто нужно удалить или добавить запись.
- Есть индекс того, сколько строк у вас есть
- Когда вы нажимаете кнопку, добавляете предварительно написанный ввод в контейнер
- Затем вы можете использовать индекс для удаления потомков, создать индекс данных, атрибут.
container.appendChild("<input name="SubBusinessCategories[index].Property" />")
Ajax Request (fetch)
Похож на Vanilla JS, но на этот раз ваш шаблон живет в PartialView.cshtml
.Это хорошо, если вам нужно запустить некоторый внутренний код перед рендерингом шаблона или каким-либо образом заполнить значения в шаблоне.
- В этом случае вам все равно нужно сохранить
index
и передатьперед обработкой рендеринга.
fetch(UrlToGetPartial).then(res => {container.appendChild(res)})
Примечание: если вы собираетесь начать удаление записей, вам нужно будет изменить индексв каждой записи.Скажем, если у вас есть 5 в списке, индекс от 0 до 4. Если вы удалите 1, вы получите 0, 2, 3, 4. Таким образом, при отправке вы получите только 1 запись с индексом 0.
JS Framework (Vue)
Вероятно, самый простой для запуска и запуска, просто добавьте файл библиотеки в свой проект.Это довольно мощный инструмент, который делает ваш код чище, чем другие решения.
Ваш Javascript
var app = new Vue({
el: '#subBusinessCategories',
data: {
rows: []
},
methods: {
addRow(){
this.rows.push(this.rows.length)
},
removeRow(index){
this.rows.splice(index, 1)
},
createName(index, property) {
return 'SubBusinessCategories[' + index + '].' + property;
}
}
})
В вашем HTML
<div id="subBusinessCategories" class="p-4 border rounded">
<button v-on:click="addRow()">Add</button>
<div v-for="(el, index) in rows">
<input v-bind:name="createName(index, 'Code')" />
<button v-on:click="removeRow(index)">Add</button>
</div>
</div>
PS: ничего из этого не проверено,Решение Vue не идеально, но подойдет для новичка, и все же позволяет использовать Razor.