gpt4 book ai didi

c# - 在 ASP.NET 代码隐藏中声明一个全局变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:15:53 24 4
gpt4 key购买 nike

我想申报一个Dictionary<string, object>可变但不知道在哪里/如何。字典中的值将是页面中的对象(ListBoxes、DropDownLists 等),因此我无法在其他地方准确地创建帮助程序类。有什么方法可以使代码隐藏中的每个方法都可以访问此变量?

最佳答案

您可以在三个地方存储数据。在应用程序级别,这使得所有 session 都可以访问数据。 session 级别,它使数据可用于该特定用户的所有页面。或者,页面级别,这使得它在回发之间对当前页面可用。请参阅以下示例:

在应用层存储
封装存储的示例类:

 public static class ApplicationData
{
private static Dictionary<string, object> _someData = new Dictionary<string, object>();

public static Dictionary<string, object> SomeData
{
get
{
return _someData;
}

}

}

使用示例(在页面加载事件中):这将增加所有 session 的值。要尝试它,请在您的计算机上打开两个浏览器并使用相同的 URL。请注意该值是如何针对每个用户的请求递增的。

            // Application Data Usage
if (ApplicationData.SomeData.ContainsKey("AppKey"))
{
ApplicationData.SomeData["AppKey"] = (int)ApplicationData.SomeData["AppKey"] + 1;
}
else
{
ApplicationData.SomeData["AppKey"] = 1;
}
Response.Write("App Data " + (int)ApplicationData.SomeData["AppKey"] + "<br />");

在 session 级别存储:封装存储的示例类:

    public class SessionData
{
private Dictionary<string, object> _someData;

private SessionData()
{
_someData = new Dictionary<string, object>();
}

public static Dictionary<string, object> SomeData
{
get
{
SessionData sessionData = (SessionData)HttpContext.Current.Session["sessionData"];
if (sessionData == null)
{
sessionData = new SessionData();
HttpContext.Current.Session["sessionData"] = sessionData;
}
return sessionData._someData;
}

}
}

使用示例(在页面加载事件中):当前用户 session 的值增加。当另一个 session 在服务器上运行时,它不会增加。

            // Session Data Usage.
if (SessionData.SomeData.ContainsKey("SessionKey"))
{
SessionData.SomeData["SessionKey"] = (int)SessionData.SomeData["SessionKey"] + 1;
}
else
{
SessionData.SomeData["SessionKey"] = 1;
}
Response.Write("Session Data " + (int)SessionData.SomeData["SessionKey"] + "<br />");

页面级存储

页面内:

    private Dictionary<string, int> _someData;

private Dictionary<string, int> SomeData
{
get
{
if (_someData == null)
{
_someData = (Dictionary<string, int>)ViewState["someData"];
if (_someData == null)
{
_someData = new Dictionary<string, int>();
ViewState.Add("someData", _someData);
}
}
return _someData;
}
}

示例用法

在页面加载处理程序中

        if (!this.IsPostBack)
{
incrementPageState();
Response.Write("Page Data " + SomeData["myKey"] + "<br />");
}
private void incrementPageState()
{
// Page Data Usage
if (SomeData.ContainsKey("myKey"))
{
SomeData["myKey"] = SomeData["myKey"] + 1;
}
else
{
SomeData["myKey"] = 1;
}
}

点击按钮:

    protected void hello_Click(object sender, EventArgs e)
{
incrementPageState();
Response.Write("Page Data " + SomeData["myKey"] + "<br />");

}

请记住,ViewState 不会在页面加载时反序列化,但会在 Button.Click 等事件处理程序中反序列化

所有代码都已经过测试,如果您想要完整的解决方案,请告诉我,我会通过电子邮件发送给您。

关于c# - 在 ASP.NET 代码隐藏中声明一个全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5351272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com