您误解了静态变量的作用。无论会话如何,都会为整个应用程序实例化一次静态变量。只要您的应用程序位于该静态变量上,该静态变量就会在您命名的会话之间共享。您可以在wikipedia上阅读它。在您的情况下,您不应该像在那里那样使用静态字段。相反,只需创建一个属性以从会话中返回值以及向其添加和删除项目的方法(您可以将它们设为静态以方便使用,但不要静态存储变量)。
public static class Helper
{
public static string[] CheckBoxes
{
get
{
string [] result = System.Web.HttpContext.Current.Session["CheckBoxId"] as string[];
if (result == null)
{
result = new string[] { };
}
return result;
}
set
{
System.Web.HttpContext.Current.Session["CheckBoxId"] = value;
}
}
public static void AddCheckBox(string value)
{
if (string.IsNullOrEmpty(value))
{
return;
}
var checkboxes = CheckBoxes.ToList();
checkboxes.Add(value);
CheckBoxes = checkboxes.Distinct().ToArray();
}
public static void RemoveCheckBox(string value)
{
if (string.IsNullOrEmpty(value))
{
return;
}
var checkboxes = CheckBoxes.ToList();
checkboxes.RemoveAll(v => v == value);
CheckBoxes = checkboxes.Distinct().ToArray();
}
}
用法
Helper.AddCheckBox("This is a Test");
string[] checkboxId = Helper.CheckBoxes;
Helper.RemoveCheckBox("This is a Test");
你在使用它时必须小心。如果没有看到您的代码,听起来您可能需要重构的不仅仅是这个。