web-dev-qa-db-ja.com

ASP.NETページでPage_Loadが2回起動する

Asp.net page_load関数は2回ロードされます。したがって、ページのパフォーマンスに影響します。誰かがそれが2回ロードされている理由を知っていますか?.

いいえ、iamはどこでもページ読み込み機能を呼び出していません...

38
Goutham

この問題にぶつかり、見つけたものと実際の問題をまとめた回答を投稿すると思いました。

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

これをテストしましたが、MyPageのメソッドにハンドルを配置すると、3回ヒットします...

32
jmoreno

ページロード関数を2回呼び出すのではなく、それがASP.NETの動作です。ページは自分自身に投稿するため、ページ上のサーバーコントロール(ポストバックに設定されているもの)が起動されると、page_load関数を呼び出します。

あなたがする必要があるのは、最初のページの読み込みとポストバックを区別するためにいくつかのチェックを入れることです

if(!IsPostBack) 
{  
//Code when initial loading 
}
 else 
{ 
// code when post back 
}
17
Julius A

ここで解決策を見つけてください........

  1. LoadイベントにBaseクラスと子クラスのハンドラーがあるかどうかを確認しますPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load、Me.Load **

  2. イベントからMe.Loadを削除するだけの場合は、ページを確認してください。これが役に立つかもしれず、あなたの問題を解決することを願っています。

11
sajeeth.S

プロジェクトで次の文字列を見つけたら:

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

誰かが彼が「a href」で通常するようにちょうどそれをしました。しかし、ブラウザは実際に更新ごとにサイトアイコンを取得しようとするため、アドレスをhrefパラメーターから、つまり同じページにリクエストを送信します。

したがって、これも確認してください。

7
Alexey F

私にとっては、空の画像タグでした。

      <img src="#" />
7
vinayak hegde

以下に示すように、IsPostBack値を必ず確認してください。

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

このIFブロック内にブレークポイントを配置して、Page_Loadを2回実行していることを確認できます。 Page_Loadが2回実行され、ポストバックではない場合は、このページのOnInit()メソッドを確認してください。以下のようにロードハンドラーを接続していないことを確認します。このコードは、以前のバージョンのVisual Studioから移行されたコードから頻繁に表示されます。

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

見つかったらこれを削除します。これは、ページのマークアップの上部に次のものがあることを前提としています。 AutoEventWireup = "true"

4
Ray

AutoEventWireUp属性をFALSEに設定することで問題を解決しました。 .net 1.1から.net 4.0に移行すると、この問題が発生しました。古いバージョンからファイルをコピーすると、VS2012が何らかの理由でこの属性をTRUEにリセットしました。

3
user2589683

私は同じ問題を抱えて解決しました。

Global.ascxと書き換えルールを確認しました。

ページがリクエストされたとき、URLの最後に「/」がなく、SEO標準の構成に従って「x.com/x」から「x.com/x/」へのリダイレクトが発生しました。

したがって、何も問題なく機能し、内部リンクはURLの最後に「/」を付けて複数のロードを回避する必要があります。

Pageオブジェクトは、PageオブジェクトのOnLoadメソッドを呼び出し、その後、ページとすべてのコントロールがロードされるまで、各子コントロールに対して再帰的に同じことを行います。個々のコントロールのLoadイベントは、ページのLoadイベントの後に発生します。

OnLoadイベントメソッドを使用して、コントロールのプロパティを設定し、データベース接続を確立します。

MSDNの参照: リンクの説明をここに入力

2
DotNET

このリンクに記載されている変更を行ってください。 http://social.msdn.Microsoft.com/Forums/en/vbgeneral/thread/ccc75925-3460-497c-8471-fcebecd8d061

ところで私はグーグルPage_Load Being called twice

1

私にとって、この問題は、2017年10月のWindowsアップデートの後、突然発生しました。 web.configのLocation要素を介して匿名ユーザーがアクセスできるようになったページでは、そのページが参照するアセット(画像、スタイルシートなど)へのアクセスも許可する必要があることに気付きました。以下の例では、ログインページと「images」ディレクトリ(別名フォルダ):

<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が2回呼び出される2番目の原因が見つかりました。古いレガシコードでは、一部のページの.aspx.designer.csファイルには、これまで問題を引き起こしていないと思われる不整合が含まれていました。修復を試みる代わりに、新しいページを作成し、ダブルロードイベントを排除しました。

0
Anke

同じ問題がありました。 ImageUrl = ""のTreeNodeが原因でした。

0
bruno leclerc

私にとっては、代わりにPreRenderイベントを使用して、この呼び出しを複数回回避できます

protected override void OnPreRender(EventArgs e)

これは、onloadおよびinitが100万回呼び出された場合でも、1回だけ呼び出されます。

0

私にとっては、それを削除することで解決しました

Handles Me.Load 

方法の変更など

Protected Overrides OnLoad(...)
0
sertsedat

Response.Redirect with Server.Transfer物事を行う新しい方法であることが提案されたため。それ以降、ページは2回読み込まれ、Chromeの戻るボタンは前のページに戻り、すぐに現在のページに戻ります。Server.Transfer with Response.Redirect、そしてすべてが正常に戻った。また、この答えを jsコードのためにページが2回読み込まれる に置きました。

0
Dieter Stalmann