为什么这偶尔抛出一个空引用错误?

时间:2014-08-14 21:25:29

标签: c# asp.net nullreferenceexception

好的,这段代码偶尔抛出一个空引用错误,因为返回((AVMain)this.Page).Model没有返回任何内容。即使使用其他人失败的相同ID值,我也无法重复此错误。任何帮助将不胜感激!

    protected AVModel Model
    {
        get
        {
            return ((AVMain)this.Page).Model;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (SessionData.IsAudit.HasValue && SessionData.IsAudit.Value == true)
        {
            cbFlagAudit.Visible = false;
        }

        if (!IsPostBack)
        {
            cbFlagAudit.Checked = this.Model.FlagForAudit.HasValue ? this.Model.FlagForAudit.Value : false;
        }
    }

2 个答案:

答案 0 :(得分:0)

我首先在整个逻辑中添加一些空引用检查。这应该可以防止NullReferenceException被抛出。

这是怎么回事?

protected AVModel Model
{
    get
    {
        if(this.Page is AVMain)
        { 
            var page = this.Page as AVMain;
            return page.Model;
        }
        return null;
    }
}
protected void Page_Load(object sender, EventArgs e)
{
    if (SessionData.IsAudit.HasValue && SessionData.IsAudit.Value == true)
    {
        cbFlagAudit.Visible = false;
    }

    if (!IsPostBack)
    {
        var model = this.Model;
        Boolean? value = null;
        if(model != null)
        {
            value = model.FlagForAudit;
        }
        cbFlagAudit.Checked = (value.HasValue && value.Value)
    }
}

答案 1 :(得分:0)

谢谢大家的建议,但由于数据库中的权限错误,实际上是在生成错误。它导致存储过程失败并且不返回填充对象所需的数据,因此它为null。最初的开发人员没有在这个项目中设置错误陷阱,因此需要花费几天时间才能找到时间。总是抓住你的错误!