2016-05-30 1 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 
} 

。どういうわけかそれらを直列化すべきだと思うけど、どうしていいか分からない。

これを行う方法はありますか?

EDIT 私のセッションは次のようになります。

[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

Mmmm、enumの代わりにstatic const stringを使用しないでください。

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"; 
    } 
} 
関連する問題