Ger Hayden Ответов: 1

Как создать страницу, эквивалентную состоянию сеанса для ASP.NET ядро?


Моя цель состоит в том, чтобы извлечь большое подмножество данных (или весь набор) из базы данных, а затем логически отобразить его на экране.

Мне нужно, чтобы мой контроллер помнил, что было извлечено только на протяжении всей страницы cshtml. Если я использую состояние сеанса или tempdata (проинструктированный запомнить список), то я сталкиваюсь с тем, что результирующий набор сохраняется в памяти после того, как пользователь уходит. Поэтому держите результирующий набор в памяти, пока пользователь просматривает его, а затем избавьтесь от него, когда пользователь уйдет.

Есть ли конструкция, которую я могу использовать, возможно, что-то вроде деструктора старой школы?

Что я уже пробовал:

У меня есть отчет в Asp.NET ядро 2.2, которое в данный момент посещает базу данных для каждой страницы данных, а затем выбирает нужную страницу.
Я могу обрезать это, чтобы получить только нужную страницу, но это не решает проблему вызова базы данных на страницу.

F-ES Sitecore

Что делать, если пользователь никогда не покидает страницу? Предположим, я перехожу на вашу страницу, а затем оставляю свой компьютер включенным, пока я что-нибудь ем, смотрю телевизор и забываю о Вашей странице? Разве ваши данные не будут эффективно кэшироваться навсегда в любом случае?

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

MadMyche

вроде того, как работает "сеанс".. и то, что MS пыталась "исправить" с помощью поля WebForms "formadata"...

Kornfeld Eliyahu Peter

Данные настолько велики, чтобы кэшировать их у клиента?

Ger Hayden

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

1 Ответов

Рейтинг:
8

Richard Deeming

Если вы не хотите вызывать базу данных для каждой страницы данных, то лучший вариант-вернуть все данные клиенту и использовать Javascript для отображения данных на странице.

Например, вы можете отобразить все данные как один большой <table>, а затем использовать Таблицы данных[^] чтобы превратить его в список страниц.

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


Ger Hayden

Совершенно правильный. Какая-то комбинация вызовов базы данных и подкачки должна произойти. Либо я позволяю entity framework откатывать страницы так, как они называются, использую список страниц (как я сейчас делаю с ключевой ошибкой, которая нуждается в исправлении), либо страницу в javascript.

Я предпочитаю подход с разбитым на страницы списком.