2016-05-30 26 views
0

我想將會話改爲靜態類型 - 我只是很討厭打字符串,因爲我有很多很多錯誤。在ASP.NET中更改默認會話提供程序

我使用了什麼技術? ASP.NET MVC通過EXT.NET MVC

我試圖做到這一點使用web.config但問題是,添加會話狀態後,視覺是不會編譯我的代碼,因爲該會話應該使用字符串作爲關鍵。

我想通過枚舉如使用會話:

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

我知道我可以創建包裝轉換枚舉爲字符串,但它不是非常令人滿意的解決方案給我。

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

我所做的就是創建一個基類的靜態對象爲我所有的控制器,然後我能碰到他們,但關閉和打開網頁後,用它我又無法從中獲得價值。我想我應該序列化他們,但我不知道如何。

有沒有辦法做到這一點?

編輯 我的會話現在看起來是這樣的:

[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 } 

回答

0

這很簡單。 創建一個UserSession對象,它執行所需的任何操作(將值保存爲枚舉等),實例化它,然後將其放入會話中。

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

然後你可以總是使用Session["UserSess"].stuff;

0

嗯,你不會使用靜態常量字符串,而不是一個枚舉?

using System.Web; 

public static class SessionEnum 
{ 
    public static const string Model = "_Session_Model"; 
    public static const string Login = "_Session_Login"; 
    public static const string LastOpenedFile = "_Session_LastOpenedFile "; 
} 

class test 
{ 
    void test() 
    { 
     Session[SessionEnum.Model] = "blah"; 
    } 
} 
相關問題