簡體   English   中英

初始化BasePage時HttpContext.Session為NULL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM