全局变量与ASP.NET会话状态

Ant*_*ine 5 .net c# asp.net session global

这可能听起来很天真,但我正在开发一个跨越多个页面的Web应用程序.所有这些页面都使用其API访问CMS的方法实例化相同的类对象.目前,当用户开始创建内容时,我将存储变量,如内容位于Session变量中的文件夹ID.

我的问题是:我可以实例化一个可以在所有页面上使用的类的单个实例,而无需在每个页面上执行它吗?如果是这样,访问该页面的每个人都会获得他们自己的课程版本吗?我假设使用静态变量和方法不是可行的方法,因为它们在内存中共享.而且,如果要在.net C#应用程序中的Web应用程序中全局使用,那么声明的内容是什么?

Bil*_*tin 7

我建议创建一个继承自System.Page的基类.然后让你的页面代码继承自那.

然后,在基类内部创建一个属性,该属性是对象的引用.像这样,例如:

public class BasePage : System.Web.UI.Page
{
    public Foo CurrentFoo
    {
        get
        {
            return (Foo)Session["FooSessionObject"];
        }
        set
        {
            if(Session["FooSessionObject"] == null)
            { 
                // instantiate a new one
                Session["FooSessionObject"] = new Foo();
            }
            Session["FooSessionObject"] = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,从任何页面的任何位置,只需执行一个CurrentFoo.并且您可以访问任何属性.

这使得后面的代码变得漂亮和干净.


Dar*_*rov 0

Session如果您想存储仅特定于当前用户的信息,则应该使用状态。

例如,在应用程序的一页中,您可以将一些值存储到会话中:

SomeType someValue = ...
Session["someKey"] = someValue;
Run Code Online (Sandbox Code Playgroud)

然后稍后在其他页面上从会话中检索它:

SomeType someValue = (SomeType)Session["someKey"];
Run Code Online (Sandbox Code Playgroud)