Getter和setter不工作,构造函数值保持空白 - ASP

时间:2016-05-08 13:47:11

标签: c# asp.net constructor null getter-setter

我有一个对象'User'的会话,我正在尝试将会话对象传递给BLSecurity.cs。此类使用User对象检查登录状态并返回布尔值。

问题在于'Gebruiker',无论如何,都保持无效。

BLSecurity.cs

<div style="position: fixed; top: 0; right: 0; padding: 3em;">
  <div id="gear-css">ooo</div>
  <div id="gear-js">ooo</div>
</div>

在我的asp项目的主文件中,我在加载函数

中执行以下操作
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;
    }   
}

当用户登录时,他会使用labelTest查看姓氏,当他退出时,他会看到“无名字”。所以这部分可行,但将它传递给BLSecurity肯定有问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

啊,我发现了问题。

问题在于,当我需要函数GebruikerIsIngelogd();时,我创建了一个新的BLSecurity实例

所以我在我的Load函数中有设置部分

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 {
        ...
    }
}

问题是DoSomething()

中的BLSecurity新实例

解决方案是将实例移到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。

答案 1 :(得分:0)

很高兴你找到了答案。我想指出,您不应该将您的变量命名为与您的类名完全相同。

而不是:

BLSecurity BLSecurity = new BLSecurity();

你应该做更多这样的事情:

BLSecurity blSecurity = new BLSecurity();

在这种情况下,它可能已经解决了,但根据经验,这是不好的做法,因为你可能会出现歧义错误。