2011-01-24 192 views
33

Asp.net page_load函數加載兩次..因此它影響我的頁面性能。 有誰知道它加載兩次的原因。Page_Load在ASP.NET頁面中觸發兩次

不,不IAM調用頁面加載函數的任何位置......

+3

一個代碼示例會很好......你是否想過這樣一個事實,即可能有一個AJAX調用會在你的頁面出現兩次。或者,也許你正在重新定向和無限循環? – Rob 2011-01-24 18:48:32

+0

請包含任何可幫助我們查看問題的代碼。另外,它可能是一個__doPostBack調用頁面代碼中的某個地方。 – 2011-01-24 18:48:32

+0

喜鮑勃和Doug, 感謝您的答覆..我..檢查沒有AJAX調用和doPostBack在我的代碼調用.. 但你倆有多少種方法可以在頁面回發兩次知道。 – Goutham 2011-01-24 19:05:37

回答

15

這不是你叫的頁面加載功能的兩倍,也就是ASP.NET的工作方式。頁面發佈到自身,從而調用page_load函數,當頁面上的任何服務器控件被觸發(設置爲回發)。

你需要做的是把一些檢查的初始頁面加載和後背部

if(!IsPostBack) 
{ 
//Code when initial loading 
} 
else 
{ 
// code when post back 
} 
+12

MVC的人? )。 – 2011-01-24 18:55:29

+1

哇我從10年前就記得這個! – 2012-07-18 11:37:23

10

請在這裏找到解決方案........

  1. 檢查是否加載事件有處理程序的基類和子類 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 把手MyBase.Load,Me.Load **

  2. 如果是隻需從活動中刪除Me.Load,現在檢查您的頁面。希望這可能會有用並解決您的問題。

28

剛剛遇到了這個問題,並認爲我會張貼一個答案總結我發現,加上我的實際問題。

1. img tags with src="" or Image tags with ImageUrl=" 
2. Using AutoEventWireup="true" and adding a page handler 
3. Having manually added the event handler (more common for C# than VB) 
4. Handling both MyBase.Load and Me.Load 

,最後我的問題....

我從一個類,包含一個網頁加載處理,這從一個類繼承了網頁加載處理繼承頁。

Public Class C1 
    Inherits System.Web.UI.Page 
    Protected Overridable Sub PageLoad(ByVal sender As Object, 
           ByVal e As System.EventArgs) Handles Me.Load 
    End Sub 
End Class 

Public Class C2 
    Inherits C1 
    Protected Overrides Sub PageLoad(ByVal sender As Object, 
         ByVal e As System.EventArgs) Handles Me.Load 
     MyBase.PageLoad(sender, e) 
    End Sub 
End Class 

Public Class MyPage 
    Inherits C2 
    Protected Overrides Sub PageLoad(ByVal sender As Object, 
         ByVal e As System.EventArgs) 
     MyBase.PageLoad(sender, e) 
    End Sub 
End Class 

我進行了測試,如果你把一個把手上的方法,我的頁面,它會得到擊中3次...

3

我通過設置AutoEventWireup屬性爲FALSE,解決了我的問題。從.net 1.1遷移到.net 4.0時遇到此問題。不知何故,當我從舊版本複製文件時,VS2012將此屬性重置爲TRUE。

0

我有同樣的問題。 這是因爲TreeUode帶有ImageUrl =「」。

6

一旦我發現下面的字符串中的一個項目:

<link rel="Shortcut Icon" href="#" type="image/x-icon" /> 

有人只是沒有像他通常以「A HREF」一樣。 但是,瀏覽器實際上會嘗試在每次刷新時獲取站點圖標,因此它會從href參數向地址發送請求,即向同一頁面發送請求。

所以,檢查一下。

0

對我來說,我能得到這個多次調用各地通過PreRender事件,而不是

protected override void OnPreRender(EventArgs e)

這只是調用一次,即使在onload的和init的被稱爲萬次。

0

我用Server.Transfer取代了Response.Redirect,因爲它被認爲是新的做事方式。此後,頁面加載兩次,Chrome中的「返回」按鈕返回到上一頁並立即返回到當前頁面。我用Response.Redirect替換了Server.Transfer,一切恢復正常。 我也把這個答案在page loads twice due to js code

3

對我來說這是一個空白的圖像標籤。

 <img src="#" /> 
4

記住檢查的IsPostBack值,如下所示:

protected void Page_Load(object sender, EventArgs e) 
    { 
      if (!this.IsPostBack) 

你可以把這個IF塊中的斷點,以驗證您運行的Page_Load兩次。 如果您看到Page_Load運行兩次,並且每次都不是回發,那麼請檢查此頁面的OnInit()方法。 確認你沒有像下面那樣連接Load處理程序。您通常會從早期版本的Visual Studio中遷移的代碼中看到此代碼。

 this.Load += new System.EventHandler(this.Page_Load); 

如果您發現它,請將其刪除。這假設您在頁面標記的頂部有以下內容。 AutoEventWireup =「true」

3

我有同樣的問題和解決。

我檢查了我的Global.ascx和我的重寫規則。

當請求頁面時,根據我對SEO標準的配置,URL的URL末尾沒有「/」,重定向從「x.com/x」發生到「x.com/x/」。

所以任何工作都很好,而且你的內部鏈接應該在URL的末尾有「/」來避免多重負載。

1

頁面對象在頁面對象上調用OnLoad方法,然後對每個子控件遞歸執行相同的操作,直到加載頁面和所有控件。單個控件的加載事件發生在頁面的加載事件之後。

使用OnLoad事件方法來設置控件中的屬性並建立數據庫連接。

Reffer MSDN:enter link description here

0

對我來說這是通過去除

Handles Me.Load 

和改變方法類似

Protected Overrides OnLoad(...) 
0

對於我來說解決這個問題10月後出現了突然2017年Windows更新。我注意到,對於通過web.config中的Location元素可供匿名用戶訪問的頁面,現在還需要授予對該頁面引用的任何資產(例如圖像,樣式表等)的訪問權限。下面的示例授予匿名訪問權限登錄頁面和「圖像」目錄(又名文件夾):

<location path="login.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 
<location path="images"> 
    <system.web> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 

更新:我發現Page_Load中的第二個原因被稱爲兩次。在舊的舊版代碼中,某些頁面的.aspx.designer.cs文件包含的矛盾顯然到目前爲止尚未引起問題。我沒有嘗試修復,而是創建了新頁面,從而消除了雙重加載事件。