【问题标题】:ASP.NET Random error: Server Error in '/' Application. Object reference not set to an instance of an objectASP.NET 随机错误:“/”应用程序中的服务器错误。你调用的对象是空的
【发布时间】:2013-08-28 19:13:46
【问题描述】:

我正在构建一个允许在 CRM 2011 中注册新帐户的 ASP.NET 网页。 一切似乎都正常,但大约半小时后,代码停止工作,没有人接触它。 该页面显示一个

““/”应用程序中的服务器错误。对象引用未设置为 对象的实例。”

重新发布代码解决了这个问题,但幕后发生了什么? 有限的时间让我觉得这可能与登录问题有关,但是当页面加载了存储在 Web.config 文件中的凭据时,就会执行登录。

在我的 ASPX 页面中

void Page_Load ( object sender , EventArgs e )
{
    LoadValues ( sender , e );

    if (!IsPostBack)
    {
        Session["PageRefresh"] = System.DateTime.Now.ToString();
    }
}

protected void Page_PreRender(object sender, EventArgs e)
{
    ViewState["PageRefresh"] = Session["PageRefresh"];
    stateView = DateTime.Parse(Session["PageRefresh"].ToString());
}

我在两个地方使用 IsPostBack:

if ((StatVar.firstExec == true || (DateTime.Parse(Session["PageRefresh"].ToString()) != stateView)) && !IsPostBack)
    ContactDropDownList.Items.Add ( new ListItem ( " " , "0" ) );

if ( (StatVar.firstExec == true || (DateTime.Parse(Session["PageRefresh"].ToString()) != stateView)) && !IsPostBack)
    ContactDropDownList.Items.Add ( new ListItem ( value , indString ) );

【问题讨论】:

  • 不可能告诉没有任何代码。确保记录所有异常并在此处发布完整的详细信息。
  • 可能你在会话中存储了一些东西,然后过期了?
  • 收到此错误时检查应用程序池的状态。
  • 代码代码代码。并且跟踪错误通常还会显示错误出现在代码中的哪一行
  • 我添加了代码。由于我编辑了跟踪,因此无法重现该错误。但我仍然需要识别它。

标签: c# asp.net dynamics-crm-2011


【解决方案1】:

这听起来像是与登录超时有关,我相信默认超时是 20 分钟。我知道您提到在 Web 配置和页面加载时会处理登录,但如果没有看到代码,则无法查看您是否在 !IsPostBack 语句或其他停止登录的语句中得到了它。

由于可用信息有限,并且从错误描述来看,听起来用户已注销,并且正在查询某些元素(可能与登录、会员详细信息或其他内容有关)并返回 null。

【讨论】:

    【解决方案2】:

    您的预渲染直接使用会话而不检查它是否为空。会话应在预设持续时间后自动到期,默认持续时间为 20 分钟。试试下面的代码

    protected void Page_PreRender(object sender, EventArgs e)
    {
       if(Session["PageRefresh"] != null)
       {
            ViewState["PageRefresh"] = Session["PageRefresh"];
            stateView = DateTime.Parse(Session["PageRefresh"].ToString());
       }
    }
    

    【讨论】:

    • 这使代码避免了上述错误。但是元素没有被添加到下拉列表中
    • 为什么要在预渲染部分写代码?为什么不使用页面加载?
    • 由于某种原因,每次验证失败时,C# 代码都会将元素添加到下拉列表中。所以我必须确保它只在第一页加载时才这样做。
    • 删除你的Page_Load事件中的!IsPostBack部分
    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多