Hier ist eine verrückte Idee, die ein faire, aber Arbeit erfordern wird und nicht für die Leistung gesund sein (abhängig von Ihre Benutzer) ..aber hier gehen wir:
ein Repository für das Caching Erstellen ‚ListResults
‘ (und Draht an die DB zu bestehen bleibt von Ihnen .. mögen oder einfach nur auf dem Server im Speicher verlassen). Kurz gesagt, was dieser Repo tun kann, ist ein ListResult
zu speichern, der alles enthält, um den Status der aktuellen Ansicht der Liste beizubehalten, die ein bestimmter Benutzer betrachtet. Dies kann Routen und andere Werte enthalten, aber im Wesentlichen alles, was benötigt wird, um zurück zu dieser bestimmten Seite der gefilterten und sortierten Liste zu gelangen.
Da der Artikel 0-zum Repo hinzugefügt wird, wird ein kleiner eindeutiger Hash/Schlüssel erzeugt, der urlfreundlich sein wird - so etwas wie "k29shjk4" - er wird zusammen mit einem Datums-/Zeitstempel hinzugefügt.
ListResult
s sind nur von dem Moment an erhalten, in dem eine Liste die Standardansicht verlässt (dh keine Filterung, Sortierung und Seite 1) - dies hilft in geringem Maße bei der Leistung.
Ein Artikel ListResult
kann nie wirklich verwendet werden, aber alle Detail-Aktionsverknüpfungen in der bestimmten Listenansicht haben den Hash-Wert zur Route hinzugefügt. Also ja, es könnte als Querystring enden, aber es wird kurz sein (URL freundlich) und wenn du dich mit Routen mehr herumalbern willst, kannst du es weiter aufräumen.
Für die Navigation "zurück" zur Liste benötigen Sie möglicherweise einen neuen kleinen Controller, der einfach den Hashwert akzeptiert und den Status der Listenansicht (Paging, Filterung und Sortierung eingeschlossen) aus der Suche umleitet/neu erstellt im Repo.
So haben wir die Anforderungen bisher erfüllt: keine Aufrufseite in der URL (in dem Sinne, dass es nicht die ganze Seite - nur ein Hash-Lookup davon); kein POSTing, keine Sitzungen, keine js.
Um die ListResult
Repo davon ab, zu groß zu stoppen (und gefährlich: Wenn Sie es an die DB bestehen), Sie ein ASP.NET background service regelmäßig die ‚alten‘ Routen durch den Zeitstempel .. und ‚verlängert‘ verwenden können, um zu beschneiden die Lebensdauer von Routen, die kontinuierlich verwendet werden, indem dem Stempel eines Elements ListResult
Zeit hinzugefügt wird, wenn es über den neuen Controller angefordert wird. Keine Notwendigkeit, eine Route unbestimmt fortzusetzen, denn wenn ein Benutzer einen Permalink zu einer Listenansicht möchte, kann er die Route der langen Liste als Lesezeichen speichern.
hoffe das hilft irgendwie
Die Detailaktion kann in meinem Fall kein Beitrag sein. Der Benutzer muss von jeder Detailseite zur gefilterten - sortierten - Seitenliste zurückkehren. Genau wie der Browser-Zurück-Button. –
Haben Sie etwas dagegen, wenn ich frage, warum Sie POST nicht verwenden können? –