我有一个使用 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 LinkButton,其中 PostBackUrl 设置为 Page2.aspx。我在 BasePage.vb 中的 OnPreInit、OnInit 和 OnLoad 中设置断点。当在 Page1.aspx 中单击 LinkButton 时,所有 3 个页面事件都会为 Page1.aspx 触发 - IsCrossPagePostBack=True,这是我对原始页面的期望。然后为 Page2.aspx 和 IsCrossPagePostback=False 触发所有 3 个页面事件,这又是预期的。
我希望此时两个页面都完成触发这些页面事件。我什至可以看到 Page2.aspx 已呈现并且在我的浏览器中可见,但由于某种原因再次触发 Page1.aspx 页面事件,这次 IsCrossPagePostback=False 允许为原始页面运行不需要的代码。
如果您不设置断点并调试此代码,您将永远不会知道它正在发生。发生这种情况没有任何明显的不利影响,除了它会花费处理时间而且我知道这是错误的。我只是无法确定是什么导致 Page1.aspx 在加载 Page2.aspx 后再次加载。
在我的调用堆栈窗口中没有调用者,只有一行包含当前的 Sub(OnPreInit、OnInit 或 OnLoad)。
我已经逐步跟踪了代码。我明白 Page2.aspx 已完全加载,然后再次出现在 Page1.aspx 的页面事件中。
我还在 Page2.aspx 中有一个 LinkButton 控件,它的 PostBackUrl 设置为 Page1.aspx - 但没有这个问题。
有谁知道可能导致这种情况或如何调试它?我看过一些帖子说空的 img 标签会导致它,但这不是这里的问题。
编辑:
经过一整夜的调试和研究,我确定我最初的 CrossPagePostback 问题实际上是由缺少图像的 IMG 标签引起的。这对我来说是个大问题,因为 IMG SRC= URL 来自我无法控制的 REST 响应中收到的数据。
REST 响应包含大量数据,其中一些是与产品相关的图像的 URL。图像对于页面信息至关重要。有数以百万计的产品,碰巧我在一个缺少图像的产品上注意到了这个问题。99.99% 的产品都有有效的图片 URL,所以这不会是一个常见的问题。
然而,我真的不希望我的原始页面加载两次,我想阻止它发生。如果目标页面中的 IMG SRC= 损坏,CrossPagePostback 场景中的原始页面将加载两次,这是一个错误吗?有修复吗??
我打算做更多的研究,但我想我会立即发布我的问题的后续内容。任何人都知道解决方案/修复?我已经阅读了关于 SO 的类似帖子,丢失的图像 src 将导致原始 CrossPagePostback 页面加载两次。答案似乎总是正确的 src URL 或使图像可用,这样就不会发生这种情况。不幸的是,我没有这些选项中的任何一个 - img SRC 是绝对正确的,正如收到的 REST 响应中提供的那样,并且图像不是我的,它应该位于 REST 响应中指定的远程服务器上。
除了在渲染我的页面之前检查每个图像的存在之外,我不知道有什么解决方法。检查存在不是一个好的选择。