【问题标题】:ASP.NET/C# Where should I declare the Session using Property?ASP.NET/C# 我应该在哪里使用属性声明会话?
【发布时间】:2012-06-06 14:50:33
【问题描述】:

NET 专家,

我有一个 ASP.NET MVP(模型视图演示器)应用程序,我在其中使用 GenMaster.Master(母版页)、Metadata.aspx(起始页)、Global.asax 等。

我正在访问 GenMaster.Master(母版页)和 Metadata.aspx(起始页)中的 Session["EncryptedQuery"]

我们的 Session 声明约定是使用如下属性:

public string EncryptedQuery
{
   get
    {
       object SessionObject = Session["EncryptedQuery"];
       return (SessionObject == null) ? String.Empty : (string)SessionObject;
    }
   set
    {
        Session["EncryptedQuery"] = value;
    }
}

现在,我应该在哪里声明这个 Session 属性以在 Master 以及所有内容页面中访问它?而且我不想直接分配/检索Session["EncryptedQuery"]

谢谢

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    MasterPage 被实现为页面的子控件。您应该可以使用 MasterPage 中的Page.Session 访问它。

    我刚刚注意到您可能一直在问是在哪里分配该属性,而不是在哪里声明它。因此,如果您要问在哪里初始化 Session 数据的最佳做法是什么,那么答案将是 HttpApplication 类的 PostAcquireRequestState event。您可以在 Global.asax 中声明它,或者使用自定义 HTTP 模块将其连接起来。

    【讨论】:

      【解决方案2】:

      这种策略效果很好,并允许从站点中的任何位置以强类型的方式访问会话数据。

      public static class SessionData
      {
          private const string ENCRPYTED_QUERY = "ENCRPYTED_QUERY";
          public static string EncrpytedQuery
          {
              get
              {
                  if (HttpContext.Current.Session != null)
                      return HttpContext.Current.Session[ENCRPYTED_QUERY] as string;
      
                  return null;
              }
              set
              {
                  HttpContext.Current.Session[ENCRPYTED_QUERY] = value;
              }
          }
      
          //add more down here...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        相关资源
        最近更新 更多