CrossPagePostback を使用する ASP.NET 4.0 アプリケーションがあります。元のページが 2 回読み込まれていることに気付きましたが、その理由がわかりません。一般的なロジックは次のとおりです。
BasePage.vb:
Public Class BasePage
Inherits System.Web.UI.Page
Protected Overrides Sub OnPreInit(e As System.EventArgs)
If IsCrossPagePostBack Then Exit Sub
...
Common code
...
MyBase.OnPreInit(e)
End Sub
Protected Overrides Sub OnInit(e As System.EventArgs)
If IsCrossPagePostBack Then Exit Sub
...
Common code
...
MyBase.OnInit(e)
End Sub
Protected Overrides Sub OnLoad(e As System.EventArgs)
If IsCrossPagePostBack Then Exit Sub
...
Common code
...
MyBase.OnLoad(e)
End Sub
End Class
Page1.vb.aspx:
Public Class _Page1
Inherits BasePage
Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
...
Page1 specific code
...
End Sub
End Class
Page2.vb.aspx:
Public Class _Page2
Inherits BasePage
Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
...
Page2 specific code
...
End Sub
End Class
Page1.aspx には、PostBackUrl が Page2.aspx に設定された ASP LinkButton があります。BasePage.vb の OnPreInit、OnInit、および OnLoad にブレークポイントを設定しました。Page1.aspx で LinkButton がクリックされると、3 つのページ イベントすべてが Page1.aspx - IsCrossPagePostBack=True に対して発生します。これは、元のページに期待するものです。次に、Page2.aspx と IsCrossPagePostback=False に対して 3 つのページ イベントがすべて発生しますが、これも想定どおりです。
この時点で、両方のページでこれらのページ イベントが発生することを期待しています。Page2.aspx がレンダリングされてブラウザーに表示されていることもわかりますが、何らかの理由で Page1.aspx ページ イベントが再び発生し、今度は IsCrossPagePostback=False が元のページに対して望ましくないコードを実行できるようにします。
ブレークポイントを設定してこのコードをデバッグしていなければ、それが起こっていることに決して気付かないでしょう。処理時間がかかり、それが間違っていることを私は知っていることを除いて、この出来事による顕著な悪影響はありません. Page2.aspx が読み込まれた後に Page1.aspx が再び読み込まれる原因を特定できません。
私の Call Stack ウィンドウには呼び出し元はなく、現在の Sub (OnPreInit、OnInit、または OnLoad) を含む 1 行のみです。
コードを段階的にトレースしました。Page2.aspx が完全に読み込まれた時点で、Page1.aspx のページ イベントに戻ります。
また、Page1.aspx に PostBackUrl が設定されている Page2.aspx に LinkButton コントロールがありますが、この問題はありません。
これを引き起こす原因やデバッグ方法を知っている人はいますか? 空の img タグが原因であるという投稿をいくつか見ましたが、それは問題ではありません。
編集:
徹夜でデバッグと調査を行った結果、最初の CrossPagePostback の問題は、実際には IMG タグの画像が欠落していることが原因であることが判明しました。IMG SRC= URL は、私が制御できない REST 応答で受信したデータから来ているため、これは私にとって大きな問題です。
REST 応答には多くのデータが含まれており、その一部は製品に関連する画像への URL です。画像はページ情報に不可欠です。何百万もの製品があり、画像が欠落している製品でこの問題に気付いたのはたまたまです. すべての製品の 99.99% に画像の有効な URL があるため、これは一般的な問題ではありません。
それでも、元のページが 2 回読み込まれることを本当に望んでおらず、それが起こらないようにしたいと考えています。これは、ターゲット ページで IMG SRC= が壊れている場合、CrossPagePostback シナリオの元のページが 2 回読み込まれるというバグですか?? 修正はありますか??
さらに調査を行うつもりですが、すぐに質問のフォローアップを投稿すると思いました。解決策/修正を知っている人はいますか? SO に関する同様の投稿を読みましたが、画像 src が欠落していると、元の CrossPagePostback ページが 2 回読み込まれます。答えは常に、src URL を修正するか、画像を利用可能にするかのいずれかであると思われるため、これは発生しません。残念ながら、私はこれらのオプションのどちらも持っていません - 受信した REST 応答で提供されているように、img SRC は完全に正しいものであり、画像は私のものではありません。REST 応答で指定されているように、リモート サーバー上にあるはずです。
ページをレンダリングする前に個々の画像の存在を確認する以外に、回避策がわかりません。存在を確認することは、良い選択肢ではありません。