2011-07-11 25 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。

我的问题,我经历的就是,每次页面被调用时,在车队的字典复位并初始化为上述值。

在我的构造函数中,我有以下,但它没有帮助,因为字典被重置并且每次都是空的。

public MyController(){ 
     if (FilterMap == null) 
     { 
      FilterMap = new Dictionary<string, bool> {{"Accepted", true}, {"Returned",true}, {"Valid", true},{"Invalid",true}}; 
     } 
} 

回答

1

最简单的办法是保存在会议上FilterMap

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

然后在你的动作来切换过滤器确保您重新设置FilterMap保存在Session(如果你没有必要改变使用内存中会话状态):

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

请注意,如果你的字典只会有这些键,你还不如用一个真正的类AcceptedReturned等属性。