我在ASP.NET MVC应用程序中有一个控制器。该页面上有几个过滤器,它们由一个Dictionary对象在控制器中表示。过滤器字典如下所示:
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。
public MyController(){
if (FilterMap == null)
{
FilterMap = new Dictionary<string, bool> {{"Accepted", true}, {"Returned",true}, {"Valid", true},{"Invalid",true}};
}
}
答案 0 :(得分: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;
}
请注意,如果您的词典只包含这些键,您也可以使用包含Accepted
,Returned
等的真实类作为属性。