Без учета имеющегося у вас тега Vue мой типичный способ управления чем-либо с большими (более двух сотен элементов DOM, а вы упомянули 1000+) состоит в том, чтобы связать его с небольшими действиями контроллера, чтобы избежать загрязнения DOM,что сильно замедляет ход событий.
Мы должны посмотреть на варианты, потому что вы собираетесь получить удар где-нибудь.Вы должны решить, где.Большое количество элементов DOM против пропускной способности запросов.Хранение данных в сеансе, чтобы они были доступны для нескольких почтовых запросов или для запроса того, что их сгенерировало.
Так что для целей здесь, я предполагаю, что мы не хотим иметь тонны элементов в DOM и просто показать / скрыть, что является самым простым способом, но не очень хорошо, когда вы начинаете добавлять элементы и комбинации, или мобильные пользователи пытаются загрузить страницу и т. д. Я также выделен именем вашей функции loadFilteredList, которое мне просто выкрикивает "add"скоро потребуется еще один фильтр ».
Итак, вот базовый дизайн:
Метод контроллера возвращает содержимое таблицы, которое вы здесь имеете, в виде частичного представления.
Он (метод контроллера) может иметь аргумент, который является опцией фильтра.(другие из них могут быть добавлены позже; дело в том, что контроллер выполняет фильтрацию и отправку данных)
Ваш javascript для onchange только запускает запрос post на контроллер для новых отфильтрованных данных.Вы можете использовать jquery или vanilla, чтобы установить HTML-контент по мере необходимости.Ваш контроллер либо получает свежие данные для фильтрации, либо использует сеанс.Все, что лучше для ваших нужд здесь.Однако вам не нужен ViewBag, это не для ситуаций такого типа.
Недостатком этого типа дизайна является то, что свежий запрос отправляется в фоновом режиме на сервер для каждого фильтра.Положительным моментом является то, что, надеюсь, ваши полезные данные достаточно малы, поэтому сделать это не так дорого, как вернуть каждую возможную строку, чтобы ее можно было отфильтровать на стороне клиента.