2011-01-24 103 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文件包含的矛盾显然到目前为止尚未引起问题。我没有尝试修复,而是创建了新页面,从而消除了双重加载事件。