Навигация по вкладкам - Рамки или AJAX? - PullRequest
3 голосов
/ 31 октября 2008

У меня есть довольно стандартный веб-интерфейс.

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

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

альтернативный текст http://img402.imageshack.us/img402/1530/pagedu8.jpg

Вкладка 1 загрузит страницу 1, содержащую сетку 1, в кадр 2, вкладка 2 загрузит страницу 2, содержащую сетку 2, в кадр 2 и т. Д.

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

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

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

Спасибо

Ответы [ 9 ]

4 голосов
/ 31 октября 2008

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

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

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

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

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

3 голосов
/ 31 октября 2008

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

2 голосов
/ 31 октября 2008

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

2 голосов
/ 31 октября 2008

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

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

и т. Д.

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

1 голос
/ 20 ноября 2008

Вы используете ASP.NET, поэтому просто загрузите все 4 элемента управления в mutliview, а затем при обратной передаче установите видимый элемент, который когда-либо нажимался на кнопку.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.multiview.aspx

1 голос
/ 31 октября 2008

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

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

1 голос
/ 31 октября 2008

Я бы порекомендовал использовать плагин jQuery и jQuery UI. Кадры не нужны, просто контейнеры div.

1 голос
/ 31 октября 2008

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

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

0 голосов
/ 20 ноября 2008

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

Единственные веские причины, по которым я могу использовать (i) фреймы, - это на самом деле элементы управления загрузкой файлов, и я не уверен, что они там тоже действительны ...

...