主页被调用两次。一旦完整页面呈现后。此时isPostback值为false,SESSION为null。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//SOME CODE
try
{
strUserId = Session[USERID].ToString();
}
catch
{
Response.Redirect("error.aspx");
}
}
}
对于母版页的第一页加载(在渲染页面之前)一切都很好。再次渲染后,调用master_page的page_load。这次访问SESSION是一个例外:
HttpException(只有在配置文件或Page指令中将enableSessionState设置为true时才能使用会话状态。还请确保System.Web.SessionStateModule或自定义会话状态模块包含在{应用程序配置中的{1}}部分。
如果调用page_load两次或三次,我没有任何问题。我只是不想在第二页加载时访问SESSION。
编辑2
第二次母版页加载正在发生,因为我之前已经监督过这段代码(现在的Global.asax文件)
<configuration>\<system.web>\<httpModules>
ErrorMessage.aspx页面是母版页的子页面:(
但仍然回答的问题是为什么即使成功呈现页面也会生成Application_Error()?我试图在Application_Error()处保留一个断点,每次事件args都为空。
答案 0 :(得分:2)
尝试将以下代码添加到Web.config
文件中 - 您可能需要将其删除,因为我不知道它目前是什么样的。您可以参考此post来查看整个会话和条件。
<system.webServer>
<modules>
<!-- UrlRewriter code here -->
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
</modules>
</system.webServer>
问题很可能围绕着您正在尝试连接母版页的ASPX
页面中的事件处理程序这一事实。这总是会引起与访问Session
甚至Application
变量等问题相关的问题。所以,请尝试以下方法:
ASPX
文件中删除标记的事件处理程序。构造函数代码
public MasterPage()
{
this.Load += new EventHandler(Page_Load);
}
然后运行您在同一个处理程序中运行的代码。
检查您的Web.config
并查看是否正确设置了以下部分。
<system.web>
<pages enableSessionState="true" />
...
</system.web
答案 1 :(得分:1)
我认为在查看了firebug中的请求后,我找到了问题的原因。一些ajax请求有两个.gif文件,这些文件不存在。因此,调用了Global.asax中的Application_Error()。生成的异常是“找不到文件”。然后在Application_Error()中有一个Server.Transfer(“〜/ ErrorMessage.aspx”)。不幸的是,ErrorMessage.aspx是母版页的子页面。因此,在每个页面上都会发出AJAX请求,导致“找不到文件”异常,然后它被转移到ErrorMessage.aspx,它看起来像主页page_load被调用了两次。
答案 2 :(得分:0)
错误说明会指示您检查使用Session
的设置。你检查过那个设置(enableSessionState
)吗?
另外,检查error.aspx
是否使用母版页,直到您知道它更好用,否则您可能会遇到一些奇怪的错误......