2

母版页被调用两次。呈现整个页面后一次。此时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");
        }
    }
}

对于母版页的第一页加载(在页面呈现之前),一切都很好。再次渲染后调用母版页的 page_load。这次访问 SESSION 给出了一个例外:

HttpException(会话状态只能在 enableSessionState 设置为 true 时使用,无论是在配置文件中还是在 Page 指令中。还请确保 System.Web.SessionStateModule 或自定义会话状态模块包含在<configuration>\<system.web>\<httpModules>应用程序的部分中配置。)。

如果 page_load 被调用两次或三次,我没有任何问题。我只是不想在第二页加载时访问 SESSION。

编辑 2

由于我之前监督过的这段代码(当前 Global.asax 文件),第二个母版页加载正在发生

 void Application_Error(object sender, EventArgs e) 
    {         
       Server.Transfer("~/ErrorMessage.aspx");
    }

ErrorMessage.aspx 页面是母版页的子页面:(

但仍然回答的问题是为什么即使在成功呈现页面时也会生成 Application_Error() ?我试图在 Application_Error() 处保留一个断点,并且事件 args 每次都是空的。

4

3 回答 3

2

尝试将以下代码添加到您的Web.config文件中 - 您可能必须将其移植,因为我不知道它目前的样子。您可以参考这篇文章来查看整个对话和条件。

<system.webServer>
    <modules>
         <!-- UrlRewriter code here -->
         <remove name="Session" />
         <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="" />
    </modules>
</system.webServer>

编辑 1

这个问题很可能围绕着您试图在ASPX母版页的页面中连接事件处理程序这一事实。这总是会导致诸如访问Session甚至Application变量之类的问题。所以,请尝试以下方法:

  1. 从文件中删除标记的事件处理程序ASPX
  2. 在母版页的构造函数中放置以下代码。

构造函数代码

public MasterPage()
{
    this.Load += new EventHandler(Page_Load);
}

然后运行您在同一个处理程序中运行的代码。

编辑 2

检查您的Web.config并查看它是否正确设置了以下部分。

<system.web>
    <pages enableSessionState="true" />
    ...
</system.web
于 2012-08-14T12:26:22.390 回答
1

在检查了 firebug 中的请求后,我想我已经找到了问题的原因。一些 ajax 请求是针对两个不存在的 .gif 文件。因此,调用了 Global.asax 中的 Application_Error()。那里产生的异常是“找不到文件”。然后在Application_Error()中有一个Server.Transfer("~/ErrorMessage.aspx")。不幸的是,ErrorMessage.aspx 是母版页的子页。因此,在每个页面上都发出 AJAX 请求,导致“找不到文件”异常,然后将其传输到 ErrorMessage.aspx,看起来母版页 page_load 被调用了两次。

于 2012-08-16T04:07:34.580 回答
0

错误描述告诉您检查使用的设置Session。您是否检查过该设置 ( enableSessionState)?

此外,检查error.aspx不使用母版页,直到你知道它工作得更好,否则你可能会得到一些奇怪的错误......

于 2012-08-14T12:20:55.423 回答