2011-07-11 15 views
0

私はASP.NET MVCアプリケーションにコントローラを持っています。このページには、コントローラ内にDictionaryオブジェクトで表されるいくつかのフィルタがあります。フィルタの辞書には、以下のようになります。ページでASP.NET MVCコントローラのシングルトン辞書?

Dictionary<string,bool> filterMap = new Dictionary<string,bool>(); 
filterMap.Add("Accepted",true); 
filterMap.Add("Rejected",true); 
filterMap.Add("Valid",true); 
filterMap.Add("Invalid",true); 

、「受理」ボタンをオフに切り替えている場合は、辞書項目(すなわちそこに尊敬の値を設定するためのトグルボタンがありますが、それは上の値を変更しますfalseに辞書項目。

私が経験しています

私の問題があり、ページが呼び出されるたびに、辞書コンストラクタでリセットされ、上記の値に初期化される。

私は私のコンストラクタで次ましたが、辞書がリセットされ、毎回nullであるために役立ちません。

最も簡単なオプションは、セッション中に FilterMapを保存することです
public MyController(){ 
     if (FilterMap == null) 
     { 
      FilterMap = new Dictionary<string, bool> {{"Accepted", true}, {"Returned",true}, {"Valid", true},{"Invalid",true}}; 
     } 
} 

答えて

1

private Dictionary<string, bool> FilterMap 
{ 
    get { return (Dictionary<string,bool>)Session["FilterMap"] ?? GetDefaultFilterMap(); } 
    set { Session["FilterMap"] = value; } 
} 

private static Dictionary<string, bool> GetDefaultFilterMap() 
{ 
    return new Dictionary<string, bool> {{"Accepted", true}, {"Returned",true}, {"Valid", true},{"Invalid",true}}; 
} 

その後、フィルタを切り替えるには、あなたのアクションでは、あなた場合は、Sessionの変化(不要を保存するために、再度FilterMapを設定してください使用メモリ内のセッション状態):

public ActionResult ShowReturned(bool show) 
{ 
    var filterMap = FilterMap; 
    filterMap["Returned"] = show; 
    FilterMap = filterMap; 
} 

辞書のみこれらのキーを持っているとしているならば、あなたにもAcceptedと実際のクラスを使用するかもしれないことに注意してください、 Returned等をプロパティとして持つ。

関連する問題