2017-10-13 1 views
0

J'ai une page de base dont j'hérite.HttpContext.Session est NULL lors de l'initialisation BasePage

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; } 
    } 
} 

Le problème que je fais l'expérience est que revient organizationid 0.

Le ValueExtractor.ExtractValFromSession ressemble à ceci

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

Vous n'avez pas besoin de déclarer le contexte. Vous héritez de la page pour que vous y ayez déjà accès. – VDWWD

Répondre

1

Vous ne pouvez pas accéder à la session dans les constructeurs de pages , vous devrez déplacer ce code vers page_load ou d'autres méthodes du cycle de vie de la page.

Plus d'informations peuvent être the page lifecycle docs