首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC中的会话变量

ASP.NET MVC中的会话变量
EN

Stack Overflow用户
提问于 2009-02-18 06:58:20
回答 8查看 303.6K关注 0票数 171

我正在编写一个网络应用程序,将允许用户浏览到网站内的多个网页,使某些请求。用户输入的所有信息都将存储在我创建的对象中。问题是,我需要从网站的任何部分访问这个对象,而我真的不知道实现这一点的最好方法。我知道一个解决方案是使用会话变量,但我不知道如何在asp .net MVC中使用它们。我该在哪里声明会话变量呢?还有别的办法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-02-18 07:09:36

我想你会想,如果事情真的属于会话状态,你会想。这是我经常做的事情,对于整个事情来说,这是一种很好的强类型方法,但在将内容放在会话上下文中时应该小心。不是因为它属于某个用户,所有的东西都应该出现在那里。

在global.asax中挂钩OnSessionStart事件

代码语言:javascript
复制
void OnSessionStart(...)
{
    HttpContext.Current.Session.Add("__MySessionObject", new MySessionObject());
}

从代码中任何HttpContext.Current属性!= null的地方,您都可以检索该对象。我用一个扩展方法来做这件事。

代码语言:javascript
复制
public static MySessionObject GetMySessionObject(this HttpContext current)
{
    return current != null ? (MySessionObject)current.Session["__MySessionObject"] : null;
}

这样你就可以在代码中

代码语言:javascript
复制
void OnLoad(...)
{
    var sessionObj = HttpContext.Current.GetMySessionObject();
    // do something with 'sessionObj'
}
票数 128
EN

Stack Overflow用户

发布于 2011-09-25 02:31:19

这里的答案是正确的,但是我很难在ASP.NET MVC3应用程序中实现它。我想要访问控制器中的会话对象,但无法弄清楚为什么我一直收到“实例未设置为对象错误的实例”的消息。我注意到的是,在控制器中,当我尝试通过执行以下操作来访问会话时,我一直收到该错误。这是因为this.HttpContext是控制器对象的一部分。

代码语言:javascript
复制
this.Session["blah"]
// or
this.HttpContext.Session["blah"]

但是,我想要的是属于System.Web名称空间的HttpContext,因为上面的答案建议在Global.asax.cs中使用它。因此,我必须显式地执行以下操作:

代码语言:javascript
复制
System.Web.HttpContext.Current.Session["blah"]

这对我很有帮助,我不确定我在这里做了什么不是作案手法的事情,但我希望它能帮助一些人!

票数 51
EN

Stack Overflow用户

发布于 2012-05-10 20:41:39

因为我不喜欢看到关于这个地方的"HTTPContext.Current.Session“,所以我使用单例模式来访问会话变量,它为您提供了一个易于访问的强类型数据包。

代码语言:javascript
复制
[Serializable]
public sealed class SessionSingleton
{
    #region Singleton

    private const string SESSION_SINGLETON_NAME = "Singleton_502E69E5-668B-E011-951F-00155DF26207";

    private SessionSingleton()
    {

    }

    public static SessionSingleton Current
    {
        get
        {
            if ( HttpContext.Current.Session[SESSION_SINGLETON_NAME] == null )
            {
                HttpContext.Current.Session[SESSION_SINGLETON_NAME] = new SessionSingleton();
            }

            return HttpContext.Current.Session[SESSION_SINGLETON_NAME] as SessionSingleton;
        }
    }

    #endregion

    public string SessionVariable { get; set; }
    public string SessionVariable2 { get; set; }

    // ...

然后,您可以从任何位置访问您的数据:

代码语言:javascript
复制
SessionSingleton.Current.SessionVariable = "Hello, World!";
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/560084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档