2016-05-30 4 views
0

Ich möchte meine Session zu statisch getippt ändern - ich hasse nur Eingabe Strings wegen vieler Fehler, die ich mache.Standard-Session-Provider in ASP.NET ändern

Welche Technologie verwende ich? ASP.NET MVC über EXT.NET MVC

Ich habe versucht, das mit web.config zu tun, aber das Problem ist, dass nach dem Hinzufügen des Sitzungsstatus zu Visual wird nicht meinen Code kompilieren, weil diese Sitzung Zeichenfolgen verwenden sollte als Schlüssel.

Ich mag von Aufzählungen Sitzung verwenden wie:

public enum SessionEnum{Model} 
public class Bar{ 
void foo(){ 
    Session[SessionEnum.Model] = "blah"; 
} 
} 

Ich bin mir bewusst, dass ich Wrapper Umwandlung Aufzählungen in Strings erstellen kann, aber es ist nicht sehr befriedigende Lösung für mich.

public class StorageWrapper{ 
    public object this[SessionEnum enum]{ get{return Session[enum.toString()]}; //+set 
} 

Was war ich für alle meine Controller statisches Objekt für Basisklasse erstellt haben und dann über ihnen, ich war in der Lage, es zu benutzen, aber nach dem Schließen und die Seite wieder zu öffnen ich von ihm zu bekommen Werte nicht in der Lage war, . Ich denke, ich sollte sie irgendwie serialisieren, aber ich habe keine Ahnung wie.

Gibt es eine Möglichkeit, das zu tun?

EDIT Meine Sitzung sieht nun wie folgt aus:

[Serializable] 
public abstract class DataWrapper<T> : HttpSessionStateBase 
{ 
    Dictionary<T, object> Dictionary { get; set; } = new Dictionary<T, object>(); 
    public object this[T a] 
    { 
     get 
     { 
      try 
      { 
       return Dictionary[a]; 
      } 
      catch 
      { 
       return null; 
      } 
     } 
     set { Dictionary[a] = value; } 
    } 
} 
[Serializable] 
public class SessionWrapper : DataWrapper<SessionNames> 
{} 
public enum SessionNames { Model, Login, LastOpenedFile } 

Antwort

0

Es ist sehr einfach. Erstellen Sie ein UserSession-Objekt, das alles, was Sie wollen (hält Ihre Werte als Enum etc), instanziieren Sie es, und dann in der Sitzung.

var US = new UserSession(); 
US.stuff = somestuff; 
Session["UserSess"] = US 

Dann können Sie einfach immer verwenden Session["UserSess"].stuff;

0

Mmmm, würden Sie nicht statische Const String anstelle einer Enum verwenden?