20000 элементов слишком велики для любого вида выпадающего списка, если только список не возвращает элементы в ответ на поиск, предпочтительно поиск, содержащий хотя бы несколько символов. «Щелчок для большего» кажется слабым и не является типичным поведением выпадающего меню. А что, если элемент, который хочет получить пользователь, находится в списке на 10000 пунктов?
Предполагая, что ваши элементы - это простые пары имя / значение (имя строки, целочисленный идентификатор или тому подобное).
JSON, тем не менее, может представлять 20000 элементов в упрощенном виде. Вы можете создать простой диалог (или список) на стороне клиента, который связывается с этими элементами, просматривает их страницы и обеспечивает фильтрацию в реальном времени. Это, безусловно, возможно (я это сделал), но требует значительного количества пользовательских сценариев или существующего элемента управления.
Преимуществом этого подхода является то, что вы можете осуществлять поиск в режиме реального времени при каждом нажатии клавиши. Удивительно, но JavaScript довольно легко справится с простыми поисками в больших наборах данных.
Если производительность является ключевой, 20000 предметов все еще слишком велики, даже в JSON. Объедините клиентский скрипт с серверным кодом для поиска, фильтрации, разбиения на страницы и т. Д. И предоставьте пользователю только ограниченный набор результатов.
РЕДАКТИРОВАТЬ: Если вы не хотите писать свой собственный элемент управления таблицей данных, вот один из возможных вариантов для сетки, которая использует JSON: http://developer.yahoo.com/yui/examples/datatable/