2012-08-14 66 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