我一直在我的asp.net应用程序中使用会话变量来传递下一个属性:
[DefaultValue(true)]
public bool IsModificationMode
{
get
{
return (bool)Session["ModificationMode"];
}
set { Session["ModificationMode"] = value; }
}
在PageLoad中,我设置了它的值。
现在在Postback之后,我失去了它的值,有一个NullReferenceException
答案 0 :(得分:4)
<modules runAllManagedModulesForAllRequests="true">
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" />
<remove name="ScriptModule" />
如果在完成上述操作后仍然没有快乐,则需要添加会话状态模块......
答案 1 :(得分:3)
我赞成@stacknewbee因为我同意他关于应用程序池自我回收的想法。作为解决方案,尝试通过将web.config条目从InProc更改为StateServer来解除会话状态与w3wp.exe进程的连接:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="30"/>
请记住,必须启动服务器服务ASP.Net State Server。
答案 2 :(得分:1)
问题可能是因为, 1.您要么在代码中的某处清除会话,要么 2.您的应用程序池正在被回收,导致您丢失会话信息。检查您的代码,检查eventvwr以查找应用程序回收消息。
答案 3 :(得分:1)
这是一个Web场,多个服务器?您可能需要会话的SQL持久性,因此它跨越服务器。您的应用程序是否在回发之间以任何理由回收?内存中的会话状态将丢失。回发之间有多长时间?你的会话超时(我认为默认为20分钟)?你确定你真的设定了价值吗?不要笑 - 我已经做到了。
而且,你绝对肯定你需要使用会话状态吗?可以查看状态工作吗?
答案 4 :(得分:0)
感谢您的所有回复 这是条目[SessionState],我在Web.config中错过了它: