CrossPagePostback:两次加载原始页面

时间:2012-06-05 03:43:11

标签: asp.net vb.net

我有一个使用CrossPagePostback的ASP.NET 4.0应用程序。我刚刚注意到我的原始页面被加载了两次,我找不到原因。这是一般逻辑:

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中,我有一个ASP LinkBut​​ton,PostBackUrl设置为Page2.aspx。我在BasePage.vb中的OnPreInit,OnInit和OnLoad中设置了断点。当在Page1.aspx中单击LinkBut​​ton时,所有3页事件都会触发Page1.aspx - IsCrossPagePostBack = True,这就是我对原始页面的期望。然后所有3页事件触发Page2.aspx和IsCrossPagePostback = False再次出现。

我希望这两个页面都可以触发这些页面事件。我甚至可以看到Page2.aspx已经呈现并且在我的浏览器中可见,但由于某种原因,Page1.aspx页面事件再次被触发,这次IsCrossPagePostback = False允许不需要的代码为原始页面运行。

如果您没有设置断点并调试此代码,您将永远不会知道它正在发生。这种情况没有任何明显的不利影响,除了它耗费处理时间,我知道这是错误的。我只是无法确定在加载Page2.aspx后再次加载Page1.aspx的原因。

在我的调用堆栈窗口中没有调用者,只有一行包含当前的Sub(OnPreInit,OnInit或OnLoad)。

我已逐步跟踪代码。我发现Page2.aspx已完全加载,然后再次进入Page1.aspx的页面事件。

我在Page2.aspx中也有一个LinkBut​​ton控件,它为Page1.aspx设置了PostBackUrl - 但是没有这个问题。

有谁知道可能导致此问题或如何调试它?我看过一些帖子说空的img标签会导致它,但这不是问题所在。

修改

经过一番调试和研究后,我确定我的原始CrossPagePostback问题实际上是由一个缺少图像的IMG标签引起的。这对我来说是个大问题,因为IMG SRC = URL来自我无法控制的REST响应中收到的数据。

REST响应包含大量数据,其中一些是与产品相关的图像的URL。图像对页面信息至关重要。有数以百万计的产品,我发现在一个缺少图像的产品上我发现了这个问题。 99.99%的产品都有图片的有效网址,因此这不会是一个常见的问题。

然而,我真的不希望我的原始页面加载两次,我想阻止它发生。这是一个错误,如果IMG SRC =在目标页面中被破坏,CrossPagePostback场景中的原始页面将加载两次吗?有没有修复?

我会做更多的研究,但我想我会立即对我的问题进行跟进。有人知道解决方案/修复吗?我在这里阅读了类似的帖子,因为缺少图像src会导致原始的CrossPagePostback页面加载两次。答案似乎总是正确的src URL或使图像可用,所以这不会发生。不幸的是,我没有这些选项 - img SRC绝对正确,因为收到的REST响应中提供的图像不是我的,它应该是在REST响应中指定的远程服务器上。

除了在重新登录页面之前检查每个单独图像的存在之外,我不知道一种解决方法。检查是否存在不是一个好的选择。

1 个答案:

答案 0 :(得分:0)

经过一番调试和研究后,我确定我的原始CrossPagePostback问题实际上是由一个缺少图像的IMG标签引起的。这对我来说是个大问题,因为IMG SRC = URL来自我无法控制的REST响应中收到的数据。

REST响应包含大量数据,其中一些是与产品相关的图像的URL。图像对页面信息至关重要。有数以百万计的产品,我发现在一个缺少图像的产品上我发现了这个问题。 99.99%的产品都有图片的有效网址,因此这不会是一个常见的问题。

然而,我真的不希望我的原始页面加载两次,我想阻止它发生。这是一个错误,如果IMG SRC =在目标页面中被破坏,CrossPagePostback场景中的原始页面将加载两次吗?有没有修复?

我会做更多的研究,但我想我会立即对我的问题进行跟进。有人知道解决方案/修复吗?

感谢。