0

我有一个奇怪的问题,我正在检查用户背后的代码是否处于活动状态

    private TimeReport paramTR;
    private ZevUser zevUser;
    protected void Page_Load(object sender, EventArgs e)
    {
        ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));
        if (user == null)
        {
            this.Response.Redirect("~/About.aspx");
        }
        this.getParameters();

        if (!this.IsPostBack)
        {
            if (paramTR.ZevUser.Active == 0)
            {
                this.Response.Redirect("~/TimeReporting/TimeReportPanel.aspx");
            }

            this.bindData();
        }


    }

但是,当我尝试使用这种方法时,我得到了 allays nullreferenceexception为什么如此......但私有 ZevUser 变量不为空,它已满......

我真的不知道为什么会这样,如果有人能向我解释为什么会这样,那就太好了

感谢您的帮助和快速答复

4

4 回答 4

2

您需要分解您的代码,以便您可以更轻松地调试它,或者如果您无法在本地调试此代码,则添加日志记录。

请记住,在调试某些东西时,您可能犯的更严重的错误是做出假设。从头开始并遵循整个过程。不要假设问题某事,也不要假设问题不可能是某事:

我在下面包含了一个分解的、更易读的版本。您现在可以围绕此添加日志记录或轻松添加断点:

private TimeReport paramTR;
private ZevUser zevUser;

protected void Page_Load(object sender, EventArgs e)
{
    this.getParameters();

    if (!this.IsPostBack)
    {
        if ((this.paramTR != null) &&
            (this.paramTR.ZevUser != null) &&
            (this.paramTR.ZevUser.Active == 0))
        {
            this.Response.Redirect("~/TimeReporting/TimeReportPanel.aspx");
        }

        this.bindData();
    }

    string sessionId = Session["SessionId"] as string;

    if (sessionId != null)
    {
        int session = int32.Parse(sessionId);

        ZevUser user = ZevUser.GetById(session);

        if (user == null)
        {
            this.Response.Redirect("~/About.aspx");
        }
    }
}

你为什么将会话ID传递给ZevUser.GetById()?我希望这会采用用户 ID,或者将方法称为ZevUser.GetBySessionId(). 目前它非常混乱。

于 2013-08-20T09:25:27.257 回答
1

此行导致问题:

ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));

这是因为Session["SessionId"]可以为空,在这种情况下为空。

如果您正在寻找由 ASP.net 设置的 SessionId,请使用this.Session.SessionID( source )。

如果您要存储Session["SessionId"]要检索的值,请先进行空检查:

if (Session["SessionId"] != null) { ...
于 2013-08-20T09:17:07.870 回答
0

SessionId在使用变量之前,您应该考虑通过执行以下操作来测试它:

if (!string.IsNullOrEmpty(Session["SessionId"].ToString()))
    ZevUser user = ZevUser.GetById(Int32.Parse(Session["SessionId"].ToString()));
于 2013-08-20T09:19:40.233 回答
0

调试异常的最佳方法是在抛出异常时启用调试。为此,请转到调试>>异常

在此处输入图像描述

然后启用前四个复选框(可能),然后尝试调试项目。您将在引发异常的位置停止。

于 2013-08-20T09:21:29.370 回答