Отправка списка/коллекции с непоследовательными индексами/позициями

У меня есть модель представления, содержащая список, например:

class School
{
    public List<Student> Students { get; set; }
}
class Student
{
    public int Id { get; set; } 
    public String Name { get; set; } 
}

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

Добавление работает нормально, но моя проблема и мой вопрос связаны с удалением студента.

Итак, позвольте мне объяснить это на примере:

Допустим, я добавляю 3 студентов, тогда их имена и идентификаторы будут привязаны к модели следующим образом:

Students[0].Id = "1"

Students[0].Name = "Student A"

Students[1].Id = "2"

Students[1].Name = "Student B"

Students[2].Id = "3"

Students[2].Name = "Student C"

Если я сохраню это, он отлично работает. Но скажем, я удаляю студента с помощью Id = "2". При отправке происходит то, что только студент с идентификатором = "1" привязывается и отдыхает после удаленного индекса (то есть студент с id = "3") не привязывается.

У меня такой вопрос: возможно ли вообще привязать этот id="3" после удаления id="2"? Или в правильном смысле можно связать/отправить список с пропущенными индексами.

Я нашел ниже упомянутые статьи о самом stackoverflow, но то, что я могу сделать из них, немного противоречит или, может быть, я их неправильно понимаю.

Пропуск Невозможен

Пропуск возможен

Я не умею объяснять проблемы. Поэтому, пожалуйста, скажите мне, могу ли я добавить что-нибудь, чтобы сделать его более наглядным.
Спасибо. Пример кода удаления: Скрипт для удаления кода Js

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

Mudit Garg 09.04.2019 10:23

Что вы подразумеваете под «привязанным», вы говорите, что когда вы удаляете студента с ID = 2, ID = 3 также удаляется из списка? Также весь индекс вашего списка равен 0, возможно, опечатка?

peeyush singh 09.04.2019 10:41

Также, если вы можете опубликовать код для добавления/удаления элементов, это было бы более полезно, без кода трудно сказать, в чем проблема.

peeyush singh 09.04.2019 10:43

Под привязкой я подразумеваю, что при нажатии кнопки «Отправить» публикуются значения. Поэтому, если я удалю студента с Id = "2", только Студенты [0].Id и Студенты [0].Name будут отправлены на сервер, а остальные не будут опубликованы.

Mudit Garg 09.04.2019 12:26

Я добавил простой код html/js для добавления/удаления. Поэтому, если я добавлю 5 студентов и удалю 1 в индексе [3], тогда будут опубликованы только значения до индекса [2]. Надеюсь, это немного полезнее.

Mudit Garg 09.04.2019 12:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
514
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Итак, если у вас есть такая коллекция:

public class Book {
    public string Title { get; set; }
    public string Author { get; set; }
    public DateTime DatePublished { get; set; }
}

//Action method on HomeController
public ActionResult UpdateProducts(ICollection<Book> books) {
    return View(books);
}

И ваша форма после добавления 3-х книг выглядит так:

<form method = "post" action = "/Home/Create">

    <input type = "text" name = "[0].Title" value = "Curious George" />
    <input type = "text" name = "[0].Author" value = "H.A. Rey" />
    <input type = "text" name = "[0].DatePublished" value = "2/23/1973" />

    <input type = "text" name = "[1].Title" value = "Code Complete" />
    <input type = "text" name = "[1].Author" value = "Steve McConnell" />
    <input type = "text" name = "[1].DatePublished" value = "6/9/2004" />

    <input type = "text" name = "[2].Title" value = "The Two Towers" />
    <input type = "text" name = "[2].Author" value = "JRR Tolkien" />
    <input type = "text" name = "[2].DatePublished" value = "6/1/2005" />

    <input type = "submit" />
</form>

Теперь, если вы, ребята, хотите добавить функцию удаления, чтобы ваша форма могла содержать непоследовательные записи, то можно сделать что-то вроде этого:

<form method = "post" action = "/Home/Create">

    <input type = "hidden" name = "products.Index" value = "cold" />
    <input type = "text" name = "products[cold].Name" value = "Beer" />
    <input type = "text" name = "products[cold].Price" value = "7.32" />

    <input type = "hidden" name = "products.Index" value = "123" />
    <input type = "text" name = "products[123].Name" value = "Chips" />
    <input type = "text" name = "products[123].Price" value = "2.23" />

    <input type = "hidden" name = "products.Index" value = "caliente" />
    <input type = "text" name = "products[caliente].Name" value = "Salsa" />
    <input type = "text" name = "products[caliente].Price" value = "1.23" />

    <input type = "submit" />
</form>

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

Более подробную информацию о том же можно найти здесь. haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

Mudit Garg 10.04.2019 07:05

Другие вопросы по теме