[英]HttpContext.Session is NULL when initializing 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; }
}
}
我遇到的問題是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;
}
您無法在頁面的構造函數中訪問會話,您需要將此代碼移至page_load
或頁面生命周期的其他方法。
更多信息可以作為頁面生命周期文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.