Нужна помощь в планировании / разработке сортируемой, разбитой на страницы, ДОСТУПНОЙ группы данных в ASP.NET MVC/AJAX

Мой JavaScript-Fu слабый, поэтому мне трудно понять, как создать сортируемую, разбитую на страницы, доступную сетку данных в моем проекте ASP.NET MVC.

Сначала подробности:

У меня есть сетка метаданных обзора видеоигр. Столбцы:

заглавие
Жанр
платформы
Гол
Дата

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

Поскольку этот сайт предназначен для игроков с ограниченными возможностями, он должен быть доступен. С этой целью я не хочу полагаться на JSON, возвращающийся из этих методов, и хотел бы, чтобы сортировки работали без JavaScript. К сожалению, это означает, что jqGrid не работает.

Мой первый инстинкт - иметь отдельные методы для каждой сортировки, чтобы я мог иметь такие URL-адреса, как:

site.com/reviews/by-title/2
site.com/reviews/by-genre/5

Где by-независимо и число аргументов Reviews::Index(),

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

Итак, что предлагает коллективная мудрость СО? Существуют ли учебники / блоги, которые описывают доступную сортировку таблиц / таблиц? Как насчет моих проблем с БД: есть ли для меня способ кэширования начального списка, который я извлекаю из БД, чтобы избежать повторных поездок?

1 ответ

Решение

Кэширование

Имея такие URL, как

site.com/reviews/by-title/2

site.com/reviews/by-genre/5

это хорошая идея, потому что она позволяет вам кэшировать вывод (минимизировать попадания в БД)

//* for any, none for never, or semicolon list for a specific set
[OutputCache(Duration = 60, VaryByParam = "sortmethod;page")]
public ViewResult Index(string sortMethod, int? page)

Для сортировки сетки у вас должен быть метод сортировки, который является общим, просто есть компаратор для каждого столбца, например

public void sort(grid, comparerDelegate)

Проверьте MvcContrib.UI.Grid, чтобы увидеть, отвечает ли он вашим требованиям разбивки на страницы / сортировки для вашей сетки.


Наличие подъездных путей:

  • Дайте понять, что ссылки для сортировки таблицы будут сортировать таблицу.
  • Держите таблицу простой - не более 1 строки заголовка и 1 строки столбца
  • Клетки должны занимать только 1 клетку (colspan=1 или же rowspan=1)

Требования высокого уровня доступности (WCAG 2)

  • осознаваемый
  • действующий
  • понятный
  • крепкий
Другие вопросы по тегам