1

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

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

重新发布代码可以解决问题,但幕后发生了什么?有限的时间让我认为这可能与登录问题有关,但是当页面加载存储在 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 ) );
4

2 回答 2

1

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

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

于 2013-08-26T11:18:01.300 回答
0

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

protected void Page_PreRender(object sender, EventArgs e)
{
   if(Session["PageRefresh"] != null)
   {
        ViewState["PageRefresh"] = Session["PageRefresh"];
        stateView = DateTime.Parse(Session["PageRefresh"].ToString());
   }
}
于 2013-08-27T03:28:10.533 回答