2012-08-14 126 views
2

母版页被调用两次。完整页面呈现后的一次。此时isPostback值为false,SESSION为空。ASP.NET母版页错误

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //SOME CODE 

     try 
     { 
      strUserId = Session[USERID].ToString(); 
     } 
     catch 
     { 
      Response.Redirect("error.aspx"); 
     } 
    } 
} 

对于母版页的第一页加载(渲染页之前)一切都很好。再次渲染主页面的page_load被调用后。这次访问会话是给一个例外:

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()处保留一个断点并且事件参数每次都是空的。

+4

你的意思是“母版页被调用两次”?你如何得出这个结论? – 2012-08-14 11:58:21

+4

你将需要更多的方式。请张贴您的母版页的代码隐藏以及有问题的子页面,以便我们可以更好地了解您正在谈论的内容。 – mclark1129 2012-08-14 11:59:30

+0

@Andre Calil:我在主页的页面加载时保持了一个中断点。它在呈现页面之前,然后在呈现页面之后调用。 – Rajneesh 2012-08-14 12:01:58

回答

0

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

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

+0

error.aspx不使用相同的母版页 – Rajneesh 2012-08-14 12:35:30

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> 

编辑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 
+0

添加了您的代码,但仍然发生同样的事情。你能否提出一种方法来检测主页面加载是否被第二次调用。所以,我不会访问SESSION在第二次加载,这将有助于避免异常 – Rajneesh 2012-08-14 12:34:37

+1

@Rajneesh - 这个处理程序连接到什么页面?编辑问题以显示事件处理程序的添加以及它存在于哪个页面上。 – 2012-08-14 12:52:28

+0

@ Mike - MasterPage.aspx.cs文件中存在事件处理程序。 AutoEventWireup =“true”在MasterPage.aspx中设置。我希望这个信息能够回答你的问题 – Rajneesh 2012-08-14 13:01:50

1

我想我已经找到了问题的原因,经过萤火虫的请求后。一些Ajax请求存在两个不存在的.gif文件。所以,Global.asax中的Application_Error()被调用。生成的异常是“找不到文件”。然后在Application_Error()中有一个Server.Transfer(“〜/ ErrorMessage.aspx”)。不幸的是,ErrorMessage.aspx是母版页的子页面。所以,在每一页上,AJAX请求都会导致“文件未找到”异常,然后将其转移到ErrorMessage.aspx,看起来像母版页page_load被调用了两次。

+1

@Rajnessh - 很好找,我也曾经遇到过,在我的经验中,这在IE中最流行。 – 2012-08-16 10:06:06