-2

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

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

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

1 回答 1

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

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

于 2013-06-16T00:29:32.167 回答