Как загрузить большие объемы данных в ListBox? ASP.NET MVC приложение - PullRequest
2 голосов
/ 25 августа 2009

Я работаю с приложением ASP.NET MVC.

Существует требование, чтобы пользователь мог выбирать элемент из списка, который может содержать более 30 000 записей.

Существует ли динамический способ наполнения содержимого этого ListBox с помощью вызова Ajax - который будет работать хорошо?

Было бы лучше, если бы я просто заполнил элемент управления ListBox на сервере, а затем попросил пользователя подождать, пока страница отобразит 30 000 записей?

Будет ли производительность лучше, если я выберу какое-то решение jQuery?

Какие-либо предложения о том, как наиболее эффективно справиться с этим сценарием (не требуя от клиента изменения требования: -))?

Ответы [ 8 ]

9 голосов
/ 25 августа 2009

Звучит как плохая идея - 30 000 записей? Как бы вы себя чувствовали, если бы вам пришлось выбирать из списка этот размер?

В этом случае лучше использовать автозаполнение.

4 голосов
/ 25 августа 2009

Я не буду пытаться ответить на это как кто-то другой уже сделал :

Этот тип контроля тоже виден часто в корпоративных приложениях: раскрывающиеся элементы управления и списки, которые содержат тысячи записей.

Some programmers just use a hammer for screws.
(источник: mac.com )

Программисты, которые по ошибке используют его как правило, намекнуть, что это может быть неуместно, когда они узнают, что это занимает чрезвычайно много времени загрузить форму.

следующее сообщение, опубликованное в Visual Basic форум программистов 11 декабря, 1996, типично:

Я хочу заполнить список с 2000 пунктов ... это занимает невероятно долго ... более 20 минут. Есть идеи?

и еще один пост 16 декабря 1996 года менее типично:

Я ищу список коробка управления, которая может ... держать большой количество записей (20 000 +)

Извините за такой громоздкий контроль часто ошибочная интерпретация всемогущий призыв к оружию: «Мы должны обеспечить целостность данных. " программисты хотят убедиться, что пользователь указывает допустимую запись; в их вид, лучший способ сделать это заставить пользователя выбрать из списка. Это было бы хорошо, если бы у вас было, скажем, 20, 60, а может быть, даже 100 предметов в список. Помимо этого числа, факт что пользователь может только прокрутить Горстка предметов одновременно вызывает контроль, чтобы стать громоздким.

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

Все данные могут быть организованы в некоторые осмысленный способ, который позволит пользователь быстрее получить доступ к конкретная информация, которую он или она интересует. Файлы организованы в папки или каталоги для пример. Сотрудники часто классифицированы по отделу, должности, или уровень заработной платы. Проектирование интерфейс для использования соответствующего организация позволит пользователю быстрее найти желаемое информация, в то же время, «Обеспечение целостности данных.»

3 голосов
/ 25 августа 2009

Единственный ответ на этот вопрос: не . Вы когда-нибудь пытались выбрать что-то из ListBox с 30 000 предметов? Клиент когда-либо делал это?

Обновление : Я думаю, что наиболее эффективное решение - отправить по электронной почте ссылку на эту страницу вашему клиенту, чтобы дать ему ощущение вселенского ужаса, вызванного этим вопросом.

1 голос
/ 25 августа 2009

Звучит как полное безумие.

Что бы чувствовал пользователь, если бы ему пришлось пролистать 30000 записей? Кроме того, для пользователей с неидеальными глазами и несколько недостаточно развитыми моторными навыками для точного манипулирования мышью опыт будет болезненным.

Не делай этого. Используйте другие подходы:

  • Пейджинг контента, опционально с флажками для выбора элементов
  • Сортировка контента по различным критериям
  • Категоризация параметров для пользователя, чтобы сначала выбрать правильную категорию, а затем выбрать из короткого списка вариантов
  • Если точный выбор не важен, попробуйте использовать технику Ajax, чтобы показать список с предложениями на выбор
  • Добавить поле фильтра для пользователя, чтобы определить шаблон, и пусть остальные просто пропадут

Другая идея для вас - использовать расширенный список, поддерживающий несколько столбцов и значков. Посмотрите на Windows Explorer. Гораздо проще выбирать из нескольких столбцов с большими значками, чем из длинного списка небольших текстовых строк.

Еще один недостаток вашего подхода: наличие сразу нескольких записей в списке выбора также увеличивает размер страницы до многих мегабайт. Если у вас включено состояние просмотра, оно будет довольно медленным и потребляет ресурсы.

0 голосов
/ 10 октября 2018

Я решил это, отправив пользователю информацию, что запрос вернул более 200 записей, а затем я загрузил только половину из них; по этому пути я предлагаю пользователю добавить еще один фильтр, чтобы уменьшить количество записей в результате. Честно говоря, я хотел бы, чтобы был какой-то лучший способ загрузить сотни на сотни записей, поскольку пользователь прокручивал список вниз, но пока безуспешно.

0 голосов
/ 25 августа 2009

Просто используйте доброе старомодное подтверждение; нет необходимости в сумасшедшем списке со всеми известными опциями во вселенной.

0 голосов
/ 25 августа 2009

30000 наименований - это не так уж много с точки зрения производительности. Попробуйте, в тестировании я смог поставить до 100 000 предметов.

Хотя, с точки зрения пользователей, я бы сказал, что 1000 пунктов при абсолютном максимуме, вероятно, являются пределом с точки зрения удобства использования. Я обычно останавливаюсь на 100 пунктах. Я бы предложил добавить текстовое поле прямо над списком. Разрешить пользователю искать термины. Вы можете использовать jquery для заполнения поля или использовать панель обновления. Если вы ограничите результаты до 100 пунктов, это будет очень быстро.

0 голосов
/ 25 августа 2009

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

Если вы загружаете все через вызовы AJAX (jQuery или иным образом), вам придется выполнить запрос, загрузить результаты, проанализировать результаты и отобразить их на странице ... что еще медленнее (особенно для чего-то этот размер).

Я бы спросил, почему ListBox требует так много записей. Ни один пользователь не сможет эффективно использовать этот элемент управления. Может быть, сократить размер списка и реализовать разбиение на страницы, чтобы сделать его немного более удобным для использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...