Вот сумасшедшая идея, которая потребует честной, но трудолюбивой работы и может не сказаться на производительности (в зависимости от ваших пользователей) .. но здесь мы идем:
Создайте репозиторий для кеширования 'ListResults
' (и подключите его для сохранения в БД, которую вы любите ... или просто оставьте в памяти на сервере).
Короче говоря, то, что может сделать этот репо, - это сохранить ListResult
, который будет включать в себя все, чтобы сохранить состояние текущего представления списка, который просматривает любой данный пользователь. Это может включать маршруты и другие значения ... но, по сути, все, что необходимо для перенаправления обратно на эту конкретную страницу отфильтрованного и отсортированного списка.
Когда элемент ListResult
добавляется в репо, генерируется небольшой уникальный хеш / ключ, который будет удобен для URL - что-то вроде этого "k29shjk4" - он добавляется к элементу вместе с отметкой даты и времени.
ListResult
сохраняются только с того момента, как список выходит из представления по умолчанию (т. Е. Без фильтрации, сортировки и страницы) - это немного снизит производительность.
Элемент ListResult
может фактически никогда не использоваться, но все подробные ссылки на действия в конкретном представлении списка имеют хеш-значение ListResult.Key
, добавленное к маршруту. Так что да, это может оказаться строкой запроса, но она будет короткой (удобной для URL), и если вы хотите больше связываться с маршрутами, вы можете привести ее в порядок.
Для навигации «назад» к списку вам может понадобиться новый маленький контроллер, который просто принимает значение хеша ListResult.Key
и перенаправляет / заново создает состояние представления списка (включая подкачку, фильтрацию и сортировку) из поиск в репо.
Итак, мы уже выполнили требования: в URL не было ни одной вызывающей страницы (в том смысле, что это не вся страница - просто ее хеш-поиск); нет сообщений, нет сеансов, нет JS.
Чтобы остановить репо ListResult
на большом (и опасном: если вы сохраните его в БД), вы можете использовать фоновую службу ASP.NET для периодического сокращения «старых» маршрутов с помощью отметки времени .. и «продлить» срок действия постоянно используемых маршрутов, добавив время к отметке элемента ListResult
при запросе через новый контроллер. Не нужно сохранять маршрут бесконечно, потому что, если пользователю нужна постоянная ссылка на представление списка, он может добавить в закладки длинный маршрут самого списка.
надеюсь, это как-то поможет