2011-02-04 33 views
0

私は以下のコードをGET辞書型のセッション変数値にしました。私のコードでは以下のコード辞書型セッション変数の値を設定する方法は?

を参照してください、私はちょうど私のセッション変数から任意の値を取得するためのコードの下に使用します。

string panelOpen = SessionDictionary.GetValue("FORMDATA", "panelOpen"); 

public class SessionDictionary 
{ 
    public static string GetValue(string dictionaryName, string key) 
    { 
     string value = string.Empty; 
     try 
     { 
      if (HttpContext.Current.Session[dictionaryName] != null) 
      { 
       Dictionary<string, string> form = (Dictionary<string, string>)HttpContext.Current.Session[dictionaryName]; 
       if (form.ContainsKey(key)) 
       { 
        if (!string.IsNullOrEmpty(key)) 
        { 
         value = form[key]; 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.Error("{0}: Error while checking Session value from Dictionary", ex, "SessionDictionary"); 
     } 
     return value; 
    } 
} 

は今、私は特定のセッションキーの値を設定するための方法を書きたいです、たとえば、

私がもう一度下のコードに行くと、私のpanelOpenキーに "First"が表示されます。

string panelOpen = SessionDictionary.GetValue("FORMDATA", "panelOpen"); 

お勧めします!

+1

なぜあなたが最初の(キー)にContainsKeyを行っていると*:

は値を削除する値

public static void SetValue(string dictionaryName, string key, string value) { if (!String.IsNullOrEmpty(key)) { try { if (HttpContext.Current.Session[dictionaryName] != null) { Dictionary<string, string> form = (Dictionary<string, string>)HttpContext.Current.Session[dictionaryName]; if (form.ContainsKey(key)) { form[key] = value; } } } catch (Exception ex) { Logger.Error("{0}: Error while checking Session value from Dictionary", ex, "SessionDictionary"); } } } 

を設定しますか?私はそれらのテストが逆転すると期待します。 –

+1

SessionStateでDictionaryを使用するときは、シリアル化できないので注意してください。セッションでSQL永続性を使用すると、スケーラビリティの問題が生じる可能性があります。http://stackoverflow.com/questions/4854406/serialization-of-dictionaryおよびhttp://support.microsoft.com/kb/311209 – StuartLC

+0

@nonnb ASPがオブジェクトが 'IXMLSerialiable'を実装することを要求しますか?そうであれば、どのようにして辞書をセッションに保存することができますか? –

答えて

1

"SetValue"は、value = form[key];という行を除いてほぼ同じです。それはform[key] = value;になります。

同じ辞書への参照がまだセッションに存在するため、「辞書をセッションに戻す」必要はありません。

例:* IsNullOrEmpty(キー)を

public static void RemoveValue(string dictionaryName, string key) 
{ 
    if (!String.IsNullOrEmpty(key)) 
    { 
    try 
    { 
     if (HttpContext.Current.Session[dictionaryName] != null) 
     { 
      Dictionary<string, string> form = (Dictionary<string, string>)HttpContext.Current.Session[dictionaryName]; 
      form.Remove(key); // no error if key didn't exist 
     } 
    } 
    catch (Exception ex) 
    { 
     Logger.Error("{0}: Error while checking Session value from Dictionary", ex, "SessionDictionary"); 
    } 
    } 
} 
+0

ありがとうございます "辞書を元に戻す必要はありません" –

+0

@MKS私はまだ編集中でした:-) –

+0

辞書セッションから特定のキーを削除することはできますか?SessionDictionary.Remove( "FORMDATA" –

関連する問題