【问题标题】:Timeout in asp.net. Object reference not set to an instance of an objectasp.net 中的超时。你调用的对象是空的
【发布时间】:2015-03-11 09:20:38
【问题描述】:

我正在运行一个 ASP 4.5 应用程序。在主页上,用户写下他的姓名和其他一些信息,然后转到另一个页面,他应该回答几个问题,然后单击按钮完成测试。我使用 Session 将用户信息从一个页面发送到另一个页面。当用户回答问题的时间超过 20 分钟时,我得到一个例外

Object reference not set to an instance of an object

[NullReferenceException: 对象引用未设置为对象的实例] WebApplication1.Test.Button1_Click(Object sender, EventArgs e) +101 System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)+154 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3803

我认为唯一的问题是超时,因为如果用户快速进行测试,一切都会正常工作。 我已经尝试添加

<sessionState timeout="300" stateNetworkTimeout="300" mode="InProc" cookieless="false"/>

<httpRuntime targetFramework="4.5" executionTimeout="300"  />

到 web.config,但它没有帮助。 有人可以解释一下我怎么了? 谢谢

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    我想你正在做类似Session["username"].ToString() 的事情,而没有先检查它是否存在。而是执行以下操作:

    string userName = Session["username"] != null ? Session["username"].ToString() : null;
    

    虽然您不需要会话...只需发布表单值,您不必担心它们会丢失。听起来您正在回发到原始页面,将发布的值写入会话,然后重定向到第 2 页。这是一次额外的旅行......只需发布到第 2 页,甚至将第 2 页与第 1 页合并并更改 PostBack 上的可见性.

    选项 2。当他们回发第 1 页时,而不是写入 Session,而是写入 cookie。

    选项 3:或者如果他们创建了用户名,在数据库中创建用户,设置身份验证 cookie,然后继续,这似乎更合乎逻辑。此时用户已登录。然后他们可以继续他们个人资料的第 2 步。

    【讨论】:

    • 是的,这正是我正在做的。但问题是我不希望我的用户在他在主页上完成一次之后重写他的用户名和其他信息。是否可以延长会话?
    • 或者,如果您真的打算使用 Session(我很少使用 Session),请参阅 this related SO post
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2013-07-22
    相关资源
    最近更新 更多