2016-05-08 80 views
0

我有一個與對象'用戶'的會話,我試圖將會話對象傳遞給BLSecurity.cs。這個類使用User對象來檢查登錄狀態並返回一個布爾值。Getter和setter不工作,構造函數值保持爲空 - ASP

問題是'Gebruiker',不管是什麼,都保持爲空。

BLSecurity.cs

public class BLSecurity { 
    private wk_Gebruiker gebruiker; 

    public wk_Gebruiker Gebruiker{ 
     get { return gebruiker; } 
     set { gebruiker = value; } 
    } 

    public BLSecurity() { 
    } 

    public bool GebruikerIsIngelogd() { 
     return Gebruiker != null; 
    } 

    public bool GebruikerIsAdmin() { 
     return Gebruiker != null && Gebruiker.gebruikerniveauID == 1; 
    } 
} 

從我的ASP項目的主文件,我中加載功能

protected void Page_Load(object sender, EventArgs e) { 
    BLSecurity BLSecurity = new BLSecurity(); 

    wk_Gebruiker gebruiker = (wk_Gebruiker)Session["gebruiker"]; 
    if (gebruiker != null) { 
     LabelTest.Text = gebruiker.voornaam; 
    } else { 
     LabelTest.Text = "no name"; 
    } 
    BLSecurity.Gebruiker = gebruiker; 

    ... 
} 

當用戶登錄之後,他看到他的姓用labelTest和他退出時,他看到了'無名'。所以這部分工作,但將它傳遞給BLSecurity一定有什麼問題。

謝謝你的幫助!

+0

嗯,我已經使用了VS的調試信息,並且我已經通過'GebruikerIsIngelogd()'函數放置了一個紅色標記。我注意到,當我徘徊在它上面時,Gebruiker是空的。此外,如果它不是null,它應該返回true,並且永遠不會發生。 – Henny

回答

1

啊,我發現了這個問題。

問題是,我創建BLSecurity的新實例,當我需要的功能GebruikerIsIngelogd();

所以我在我的裝載功能的設置部位

protected void Page_Load(object sender, EventArgs e) { 
    BLSecurity BLSecurity = new BLSecurity(); 

    BLSecurity.Gebruiker = (wk_Gebruiker)Session["gebruiker"]; 

    SomeFunction(); 
} 

而在功能SomeFunction();我所需要的那些方法。

SomeFunction();

private void SomeFunction(){ 
    BLSecurity BLSecurity = new BLSecurity();  //here lies the problem 

    if(BLSecurity.IsLoggedIn()){ 
     ... 
    } else { 
     ... 
    } 
} 

所以問題是BLSecurity的DoSomething()

解決方案這一新的實例是移動的Page_Load()

public partial class WineKeeper : System.Web.UI.MasterPage { 

    private BLSecurity BLSecurity = new BLSecurity(); 

    protected void Page_Load(object sender, EventArgs e) { 
     BLSecurity.Gebruiker = (wk_Gebruiker)Session["gebruiker"]; 
     SomeFunction(); 
    } 
} 

這樣,我不會被覆蓋掉上面的實例這會導致null。

0

很高興你找到了答案。我想指出,你不應該把你的變量命名爲和你的類名一樣。

取而代之的是:

BLSecurity BLSecurity = new BLSecurity(); 

你應該做更多的東西是這樣的:

BLSecurity blSecurity = new BLSecurity(); 

可能在這種情況下,已經制定了你,但作爲一個經驗法則,這是不好的練習,因爲你可以得到不明確的錯誤。

+0

噢,是的,你是對的。我從我班的課程中挑出了錯誤。由於「業務邏輯」的縮寫,我認爲它是用大寫字母表示的,但它與通常的語法相同。 感謝您指出。 – Henny