2012-01-18 43 views
0

無法繼續運行:Why will it always be a null value?我的變量永遠不會被設置

當實例中我PageStyle.GetInstance().StartItem = MyWantedStartItem;起始物品保持爲空並沒有得到更新,使我的課無法使用。這反過來返回一個項目不能爲空錯誤。

我再次想知道爲什麼會發生這種情況,我能做些什麼來解決它?有沒有更好的方式來做到這一點?

類訪問對象:

public partial class MainLayout : System.Web.UI.Page 
{ 
    public string StartItem; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     GetStartItem(); 
     SetStartItem(); 
     InitializeCSS(); 
    } 

    private void GetStartItem() 
    { 
     StartItem = Sitecore.Context.Item.Paths.FullPath; 
    } 

    private void SetStartItem() 
    { 
     PageStyle.GetInstance().StartItem = StartItem; 
    } 


    private void InitializeCSS() 
    { 
     Body.Attributes.Add("style", "background-color: " + PageStyle.GetInstance().BackgroundColor); // Body background color 
    } 
} 

被訪問的類有:

private static PageStyle _Instance = null; 

    // Instantiate variables relating to sitecore item paths. 
    Database webDB; 
    Sitecore.Data.Items.Item item; 

    private string _startItem; 

    public string StartItem 
    { 
     get 
     { 
      return _startItem; 
     } 

     set 
     { 
      _startItem = value; 
     } 
    } 

    // constructor 
    private PageStyle() 
    { 
     this.webDB = Sitecore.Configuration.Factory.GetDatabase("web"); 
     this.item = webDB.Items[StartItem]; 
    } 

    // Method that gets instance 
    public static PageStyle GetInstance() 
    {  
     if (_Instance == null)   
      _Instance = new PageStyle();   
     return _Instance; 
    } 

回答

0

通過這樣解決:

// constructor 
    private PageStyle(string item) 
    { 
     this.webDB = Sitecore.Configuration.Factory.GetDatabase("web"); 
     this.item = webDB.Items[item]; 
    } 

    public static PageStyle GetInstance(string item) 
    { 
      lock (lockObject) 
      { 
       if (_Instance == null) 
        _Instance = new PageStyle(item); 
      } 
      return _Instance; 
    } 

然後當過我需要的情況下我定義我要使用的開始項目。

PageStyle.GetInstance(MyItem);

將設置它,讓我得到想要的影響。

+1

你的代碼和作者的代碼沒有區別。他們都會有同樣的問題。我懷疑** item **爲null的原因是因爲webDB.Items [value]; ** ** null ** –

+0

您的權利,但'PageStyle.GetInstance()。StartItem'的步驟已經在我的代碼中。項目設置的方式無法實現,因此'value'設置爲null。 – Anicho

+0

我現在看到問題所在,解決了問題。 – Anicho

相關問題