2008-10-31 2 views
3

У меня есть то, что я представляю как довольно стандартный веб-интерфейс.Вкладка Навигация - Рамки или AJAX?

Существует 4 различных вида ListViews (элементы управления сеткой), к которым обращается серия вкладок сверху.

Я реализовал это следующим образом:

alt text http://img402.imageshack.us/img402/1530/pagedu8.jpg

Вкладка 1 загрузит страницу 1, содержащий 1 Сетка в рамке 2, Tab 2 будет загружать страницу, содержащую 2 Сетка 2 в раме 2 и т.д.

Однако это означает, что если вы нажмете на элемент в Grid, и я загружаю DetailsPage1.aspx в Frame 2, то Frame 1 и вкладки все еще видны и активны.

Мне сообщили, что у меня должен быть только один кадр и динамически загружать страницы в зависимости от щелчка на вкладке, используя HttpRequest (или WebRequest в asp.net).

Это правильный подход? Если у вас есть какие-либо ресурсы или подсказки, это будет оценено!

Благодаря

ответ

4

Рамки - это абсолютное нет-нет. Нет никакой выгоды для кадров, которые не могут быть достигнуты с использованием других методов.

Означает ли это, что вы должны использовать AJAX? Не обязательно. AJAX - идеальное решение, если вы чувствуете необходимость обеспечить богатый, бесшовный интерфейс, но это не является абсолютно необходимым.

Вы можете использовать серверную часть, чтобы разделить ваши вкладки на другую (общую) подстраницу, но, поскольку вы упоминаете ASP.NET (при условии, что вы работаете на платформе v2 или выше), вы можете использовать Master Страницы, в которых ваши вкладки находятся в одном разделе контента или в самом Мастере, а ваши сетки/детали находятся в другом разделе контента.

Ключевое различие между этими двумя методами заключается в том, что использование AJAX перехода от вкладки к вкладке будет гладким и бесшовным, но a) требуется немного дополнительной работы (особенно если вы не знакомы с какой-либо базой AJAX) и б) поскольку вы по существу имеете 4 страницы, перелистывающихся в одну, страницы «тяжелее» и более сложны в обслуживании. Если вы выбираете маршрут, отличный от AJAX, ключевое различие заключается в том, что при каждом нажатии каждой вкладки будет небольшой, но отличный эффект обновления (так как каждый раз он загружает новую страницу).

Конечно, главные страницы полезны для поддержания единообразного стиля и структуры сайта в любом случае, поэтому нет причин, по которым вы не можете использовать AJAX с системой Master Page.

3

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

1

Вы пробовали TabContainer или загрузите все 4 панели деталей и просто показываете/скрываете панели при изменении выбора вкладок?

В зависимости от того, какие экраны будут видеть ваши пользователи, если вы динамически загружаете подробные представления (Ajax или postback), может возникнуть проблема с сохранением любой информации, введенной пользователем, и вы будете ждать (пользователи не хотят ждать)

2

Ajax - лучший выбор. Но имейте в виду сделать его доступным для просмотра через спину/вперед. Лучший выбор - изменить хэш страницы. Я что-то вроде этого:

domain.com/#tab1 на первой вкладке domain.com/#tab2 на второй вкладке

и так далее.

Если вы используете jQuery, this может быть хорошим началом (я использую это, и у меня не было проблем). Я уверен, что есть решение для всех популярных фреймворков, хотя :)

2

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

1

Я бы рекомендовал использовать jQuery и jQuery UI-плагин. Никаких фреймов не потребуется, просто контейнеры div.

1

Как и StingyJack, я бы предложил взглянуть на элемент управления TabContainer, но вы можете позаботиться о том, чтобы ваш ViewState не стал слишком большим, если вы это сделаете.

Так, например, не загружайте ничего в GridView до тех пор, пока эта вкладка не будет просмотрена и не будет удалена из нее, если это не так (при необходимости, вернувшись к базе данных, если потребуется). Использование события ActiveTabChanged в TabContainer будет ключевым для этой стратегии.Вы разрешаете ViewState для сеток, но оставляете его для контейнера.

+0

Hmobius вы могли бы объяснить немного больше, это может быть очень полезным. В событии ActiveTabChanged как отключить ViewState на сетках? Так, например, if (tab.index == 1) {// как отключить ViewState только gridview1}? Благодаря! – Sean 2008-10-31 13:44:56

+0

Каждый элемент управления на вкладке имеет EnableViewState = «false», а затем, когда активируется активация изменений, любая основная информация (значения ключей для всех выбранных, значения сортировки и т. Д.) Сохраняется в ViewState элемента управления whoel, а любые элементы lsit удаляются из этого заполнение элементов управления в новом. – Hmobius 2008-11-06 13:05:55

-1

НЕ использует фреймы (или плавающие фреймы по этому вопросу), если вы абсолютно должен ...

Допустимы только причины я могу думать о том, чтобы использовать (I) кадров является контроль загрузки файлов на самом деле, и Я не уверен, что это действительно так ...

Смежные вопросы