2017-10-13 43 views
0

我有一个我从中继承的基页。初始化BasePage时HttpContext.Session为NULL

public class BasePage : System.Web.UI.Page 
{ 
    protected readonly ValueExtractor ValueExtractor; 
    protected sealed override HttpContext Context => base.Context; 

    public BasePage() 
    { 
     ValueExtractor = new ValueExtractor(new HttpContextWrapper(Context)); 
     ClientTimeZone = new TimeZoneHelper(OrganizationId); 
    } 

    public int OrganizationId 
    { 
     get { return ValueExtractor.ExtractValFromSession<int>("OrgId"); } 
     set { Session["OrgId"] = value; } 
    } 
} 

是我遇到的问题是,OrganizationId返回0

的ValueExtractor.ExtractValFromSession看起来像这样

public T ExtractValFromSession<T>(string key, bool throwException = true) 
{ 
    var ret = default(T); 
    var typeParameterType = typeof(T); 
    if (_context.Session == null) return ret; // The problem occurs here because Session is null 
    var val = _context.Session[key]; 
    if (val != null) 
    { 
     try 
     { 
      if (typeParameterType == typeof(int)) 
      { 
       int r; 
       int.TryParse(val.ToString(), out r); 
       ret = (T)Convert.ChangeType(r, typeof(T), CultureInfo.InvariantCulture); 
      } 
      else if (typeParameterType == typeof(bool)) 
      { 
       bool r; 
       bool.TryParse(val.ToString(), out r); 
       ret = (T)Convert.ChangeType(r, typeof(T), CultureInfo.InvariantCulture); 
      } 
      else if(typeParameterType == typeof(string)) 
       ret = (T)Convert.ChangeType(val.ToString(), typeof(T), CultureInfo.InvariantCulture); 
      else 
       ret = (T)Convert.ChangeType(val, typeof(T), CultureInfo.InvariantCulture); 

     } 
     catch (Exception ex) 
     { 
      throw new ApplicationException($"ExtractValFromSession error: {ex.Message}"); 
     } 
    } 
    else 
    { 
     return ret; 
    } 
    return ret; 
} 
+0

你不需要声明上下文。您正在从页面继承,因此您已经有权访问它。 – VDWWD

回答

1

您不能在页面构造函数访问会话,您需要将此代码移至page_load或页面生命周期的其他方法。

更多的信息可以是the page lifecycle docs

相关问题