如何创建会话数组(需要语法)

时间:2013-06-16 00:23:16

标签: c#

我在asp.net(C#)中创建了一个Web应用程序,并使用静态类文件来获取不同Web表单(页面)中的复选框名称复选框相互依赖,仅在某些或其他时可见复选框已选中或未选中。现在该应用程序被多个用户使用,并且用户进行的所有检查都进入静态类文件。由于此应用程序未显示必需的复选框。

是否可以将类文件更改为会话变量。我有300个复选框。所以我想把所有点击的复选框放入会话变量。

public static string[] CheckboxID = new string[350];

1 个答案:

答案 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");

你在使用它时必须要小心。没有看到你的代码,听起来你可能有更多的重构而不仅仅是这个。