我在asp.net(C#)中创建了一个Web应用程序,并使用静态类文件来获取不同Web表单(页面)中的复选框名称复选框相互依赖,仅在某些或其他时可见复选框已选中或未选中。现在该应用程序被多个用户使用,并且用户进行的所有检查都进入静态类文件。由于此应用程序未显示必需的复选框。
是否可以将类文件更改为会话变量。我有300个复选框。所以我想把所有点击的复选框放入会话变量。
public static string[] CheckboxID = new string[350];
答案 0 :(得分:3)
你误解了静态变量的作用。无论会话如何,静态变量都会为整个应用程序实例化一次。只要你的应用程序在那个静态变量将在用户之间共享,你命名的会话。您可以在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");
你在使用它时必须要小心。没有看到你的代码,听起来你可能有更多的重构而不仅仅是这个。