我正在构建一个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 ) );
答案 0 :(得分:1)
这听起来像是与登录超时有关,默认超时我认为是20分钟。我知道你提到了在web配置和页面加载中注册的登录但是没有看到代码就不可能看到你是否已经在!IsPostBack语句或其他阻止登录的内容中找到了。
有了可用的有限信息,并且从错误描述中听起来用户已注销,并且正在查询某些元素(可能与登录,成员资格等有关)并返回null。
答案 1 :(得分:0)
您的prerender直接使用会话而不检查它是否为空。会话意味着在预设的持续时间后自动过期,默认情况下,持续时间为20分钟。请尝试以下代码
protected void Page_PreRender(object sender, EventArgs e)
{
if(Session["PageRefresh"] != null)
{
ViewState["PageRefresh"] = Session["PageRefresh"];
stateView = DateTime.Parse(Session["PageRefresh"].ToString());
}
}