Ik heb een alternatief bedacht voor het opslaan van variabelen in de Session.
Het is een class die ik ApplicationState noem. Variabelen die je normaal in de Session zou bewaren, kan je nu in deze class bewaren.
Stel je hebt een aspx pagina met een DataGrid met records uit een database. Wanneer je een record aanklikt wordt een nieuwe pagina geladen met alle gedetailleerde informatie over dat record. In dit geval zou je de ID van dat record willen meegeven naar de nieuwe pagina.
De class ApplicationState ziet er zo uit (let op de static declaratie van de Hashtable en de class methods:
In pagina ik kan ik het ID opslaan door:
En in pagina 2 kan ik deze ID weer ophalen door:
De reden dat ik deze oplossing bedacht heb is omdat ik nogal wat problemen heb met het verdwijnen van Session variables (antivirus scanner mogelijke oorzaak). Deze methode werkt altijd. En het gebruik van de querystring hou ik niet van.
Het gebruik van Server.Transfer zou nog een mogelijkheid zijn, maar die vind ik vrij omslachtig, en bij het laden van de tweede aspx pagina zie je (als ik het me goed herinner) nog steeds de naam van de eerste aspx pagina in de URL-balk van IE.
Dit lijkt me een prima oplossing, of zie ik nog belangrijke nadelen over het hoofd?
PS. Ik ben me ervan bewust dat er in de class nog een null-check moet komen of een try/catch, en eventueel een RemoveProperty method.
Het is een class die ik ApplicationState noem. Variabelen die je normaal in de Session zou bewaren, kan je nu in deze class bewaren.
Stel je hebt een aspx pagina met een DataGrid met records uit een database. Wanneer je een record aanklikt wordt een nieuwe pagina geladen met alle gedetailleerde informatie over dat record. In dit geval zou je de ID van dat record willen meegeven naar de nieuwe pagina.
De class ApplicationState ziet er zo uit (let op de static declaratie van de Hashtable en de class methods:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| using System;
using System.Collections;
namespace state
{
public class ApplicationState
{
private static Hashtable state = new Hashtable();
public static void AddProperty(Object o, string key)
{
state.Add(key, o);
}
public static Object GetProperty(string key)
{
return state["test"];
}
}
} |
In pagina ik kan ik het ID opslaan door:
code:
1
| ApplicationState.AddProperty(id, "customerId"); |
En in pagina 2 kan ik deze ID weer ophalen door:
code:
1
| ApplicationState.GetProperty("customerId"); |
De reden dat ik deze oplossing bedacht heb is omdat ik nogal wat problemen heb met het verdwijnen van Session variables (antivirus scanner mogelijke oorzaak). Deze methode werkt altijd. En het gebruik van de querystring hou ik niet van.
Het gebruik van Server.Transfer zou nog een mogelijkheid zijn, maar die vind ik vrij omslachtig, en bij het laden van de tweede aspx pagina zie je (als ik het me goed herinner) nog steeds de naam van de eerste aspx pagina in de URL-balk van IE.
Dit lijkt me een prima oplossing, of zie ik nog belangrijke nadelen over het hoofd?
PS. Ik ben me ervan bewust dat er in de class nog een null-check moet komen of een try/catch, en eventueel een RemoveProperty method.