Here is a crazy idea that will require a fair one, but one that works and cannot be healthy for performance (depending on your users) .. but here we go:
Create a repository for caching ' ListResults ' (and plug it in so that it is stored in the database, for example, or just left it in memory on the server). In short, what this Repo can do is save a ListResult , which will include everything to save the state of the current view of the list that any given user is looking at. This may include routes and other values .. but essentially everything you need to redirect a filtered and sorted list to this page.
When the ListResult element ListResult added to the repo, a small unique hash key is created that will be URL friendly - something like this "k29shjk4" - it is added to the element along with a date and time stamp.
ListResult are saved only from the moment the list leaves the default view (i.e. there is no filtering, sorting, and Page 1). This will help in a small increase in productivity.
Element
A ListResult never be used, but all the detailed actionlinks in a specific kind of list have a ListResult.Key hash value added to the route. So yes, it may end up as a querystring, but it will be short (url-friendly), and if you want to get more confused with the routes, you can tidy it up.
To navigate back to the list, you may need a new small controller that takes just the hash value of ListResult.Key and redirects / re-creates the state of the list view (paging, filtering and sorting included) from the search in the repo.
So, we have fulfilled the requirements so far: not a single calling page in the URL (in the sense that its not the whole page is just a hash search); no posting, no sessions, no js.
To stop the repo from ListResult to large (and it’s dangerous: if you save it to the database), you can use the ASP.NET background service to periodically trim the "old" routes with a timestamp .. and "extend" the life of routes that are constantly used, adding time to the mark of the ListResult when it is requested through the new controller. No need to stop the route indefinitely, if the user needs a permanent link to the list view, they can bookmark the route of the long list itself.
hope this helps somehow