Проблема в том, что <select>
элементы должны быть визуализированы (но не обязательно видимы ), чтобы надежно получить доступ к их свойствам размеров.
Такdisplay: none;
не будет работать, потому что элементы не визуализируются, а visibility: hidden;
будет работать частично, потому что элементы визуализируются, поэтому пространство для них выделяется на странице, но скрыто, так что пространство остается пустым.
Третье решение состоит в том, чтобы визуализировать контейнер как обычно, но сделать его абсолютно позиционированным вне области просмотра браузера:
filterPanel.Attributes.Add("style",
"position: fixed; left: -10000px; top: -10000px;");
Таким образом, панель и ее содержимое победят 'быть видимым, но размер элементов <select>
будет вычислен правильно.
На стороне клиента формула для отображения панели будет выглядеть так:
document.getElementById("filterPanelClientID").style.position = "static";
И скрыть еееще раз:
document.getElementById("filterPanelClientID").style.position = "fixed";
Вы можете протестировать реализацию на основе jQuery здесь .