如何在ASP.net Web应用程序中定义全局变量

时间:2010-11-13 05:17:09

标签: c# asp.net

我有一个要求,

我希望客户端访问数据中心但不使用数据库,所以我希望我的Web应用程序可以保留全局或Application会话变量,其中包含数据,每个客户端都可以访问相同的数据...我试着声明在golabl中,但似乎它只能存储String但其他人......

如何解决这个问题?

感谢。

5 个答案:

答案 0 :(得分:10)

定义全局变量的另一个选择是创建一个带静态属性的静态类:

public static class GlobalVariables
{
    public static string MyGlobalVariable { get; set; }
}

如果要将其用作数据存储,可以使其更复杂,但同样的想法也是如此。比如,你有一个存储全局数据的字典,你可以这样做:

public static class GlobalData
{
    private static readonly object _syncRoot = new object();
    private static Dictionary<string, int> _data;

    public static int GetItemsByTag(string tag)
    {
        lock (_syncRoot)
        {
            if (_data == null)
                _data = LoadItemsByTag();

            return _data[tag];
        }
    }

    private static Dictionary<string, int> LoadItemsByTag()
    {
        var result = new Dictionary<string, int>();

        // Load the data from e.g. an XML file into the result object.

        return result;
    }
}

答案 1 :(得分:5)

要与所有应用程序用户共享数据,可以使用ASP.NET Application对象。给出了在ASP.NET中访问Application对象的示例代码:

Hashtable htblGlobalValues = null;

if (Application["GlobalValueKey"] != null)
{
    htblGlobalValues = Application["GlobalValueKey"] as Hashtable;
}
else
{
    htblGlobalValues = new Hashtable();
}

htblGlobalValues.Add("Key1", "Value1");
htblGlobalValues.Add("Key2", "Value2");

this.Application["GlobalValueKey"] = htblGlobalValues;
任何用户都可以在整个应用程序的任何地方使用

Application["GlobalValueKey"]。它对所有应用程序用户都是通用的。

答案 2 :(得分:2)

如果需要,您可以将数据填充到Application对象中。它在应用程序实例中不是持久的,但这可能就足够了。

(我不是一分钟就会建议这是一种最佳做法,但如果没有更清晰的要求,那就是我所能提出的建议。)

http://msdn.microsoft.com/en-us/library/system.web.ui.page.application.aspx
http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

答案 3 :(得分:1)

如果您使用的是WebApplicationMVC,请转到Global.asax(在WebSite项目中,您需要从添加新项目菜单中添加Global.asax)。
我将说明为您的Web应用程序部署两个全局变量:
打开Global.asax文件,然后在Application_Start函数中定义变量,如下所示:

void Application_Start(object sender, EventArgs e)
{
   Application.Lock();
   Application["variable1"] = "Some Value for variable1";
   Application["variable2"] = "Some Value for variable2";
   Application.UnLock();
}


如果要使用aspx页面中的那些全局变量,只需要这样调用它们:

<p>I want to call variable1 <%=Application["variable1"].ToString() %></p>
<p>I want to call variable1 <%=Application["variable2"].ToString() %></p>


但是,如果要在服务器端调用这些全局变量,例如:

protected void Page_Load(object sender, EventArgs e)
{
   string str1 = Application["variable1"].ToString();
   string str2 = Application["variable2"].ToString();
}

注意:您必须注意,这些全局变量对所有用户都是公用的,不适合身份验证作业。

答案 4 :(得分:0)

您还可以使用Cache,它具有设置过期时间/日期等功能的优势。