ASP.NET如何使用Sessions,何时何地声明它?

时间:2016-04-01 21:46:05

标签: c# asp.net asp.net-mvc

我正在尝试从db中检索一些数据,并将其存储为一些Session变量,以便在所有页面上的_Layout.cshtml中使用它,无论用户从一开始访问哪个页面。 Global.asax中:

protected void Application_Start() { ... Manager mng = new Manager(); HttpContext.Current.Session["company-cellphone"] = mng.GetContacts().CompanyCellphone; }

错误:异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

3 个答案:

答案 0 :(得分:1)

您正尝试从Application_Start访问会话,但还没有实时会话。

会话在global.asax

的所有事件中都不可用

作为解决方法尝试:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
     if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
     {
            HttpContext context = HttpContext.Current;
            ...
            Manager mng = new Manager();
            HttpContext.Current.Session["company-cellphone"] = mng.GetContacts().CompanyCellphone;
     }
 }

我不确定您的要求,但我建议您在controller.initialize方法中访问会话

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
   base.Initialize(requestContext);
   //// access session here
   requestContext.HttpContext.Session["company-cellphone"]=mng.GetContacts().CompanyCellphone;
}

答案 1 :(得分:0)

Application_Start在创建任何会话之前运行。会话特定于连接到您的应用程序的单个客户端。

您可以创建静态类并将公司手机价值存储在其中。

在Models文件夹中,在该文件中创建一个名为Global.cs的新类文件,创建一个静态类,其中包含保存应用程序级别信息的属性。

public static class Global
{
    static string companyCellPhone;

    public static string companyCellPhone
    {
    get
    {
        return this.companyCellPhone;
    }
    set
    {
        this.companyCellPhone= value;
    }
}

然后你的Application_Start方法看起来像这样:

protected void Application_Start()
{
    ...
    Manager mng = new Manager();
    Global.companyCellPhone = mng.GetContacts().CompanyCellphone;
}

答案 2 :(得分:0)

我将走出困境,并猜测这是一个可被所有用户查看的全局值。在这种情况下,您可以将值存储在HttpApplicationState而不是HttpSessionState:

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        Application["YourValue"] = "SomeValue";
    }
}

我不一定主张使用它。但正如Session可以存储特定于用户的值,Application存储应用程序的全局值。