在Firefox浏览器中,页面加载会触发两次的问题

6

首先,一些背景信息:我有一个页面显示所选项目的点击次数(或浏览量)。每次加载页面时都会调用点击计数器程序。

if (Request.QueryString.HasKeys())
{
    // get item id from icoming url e.g details.aspx?itemid=26            

    string itemid = Request.Params["itemid"];

    if (!Page.IsPostBack)
    {
        countHit(itemid);
    }
}

问题:我的期望是每次页面加载时计数器会增加1,但是我的数据列表和表单视图上的计数器总是落后并且递增2,即 1, 2, 3, 4 变成了 0, 2, 4, 6。看起来页面加载触发了两次。后来我发现这只发生在使用Mozilla Firefox时。其他浏览器如IE则表现正常。这让我很沮丧。

你可能想下载 Fiddler,它是一个 HTTP 代理工具,可以查看 Web 服务器和浏览器之间实际发生的情况。 - James Black
好的,我做了些调查,似乎火狐浏览器出现了同一个请求重复发送的问题。 - The_AlienCoder
9个回答

24

如果页面上有未指定src属性的<asp:Image><img runat="server">,那么Page_Load可能会触发两次。

这值得一看。


+1 谢谢! 由于某种原因,如果 img 标签缺少 src 属性,FF 会感觉需要重复请求! - The_AlienCoder
你似乎在ASP.NET上花了很多时间,+1。 - Akash Kava
我想补充一下,这也可能发生在没有指定属性的javascript标签中。 - Adam

3

我注意到以下几点:

如果您在 img 控件中将 src 属性赋值为空字符串,可能是因为您忘记了分配 imageurl 或者想在代码后台基于某些条件分配 imageurl,但该条件从未被执行,最终导致 ASP.Net 渲染页面时将空字符串分配给 src 属性。

如果您将 href 属性分配为空字符串以用于 html 链接的样式表。

如果您将空的 src 属性设置为 script。

有关更多信息,请参阅此文章。http://patelshailesh.com/index.php/page_load-event-fires-twice-with-firefox-only


2
我们遇到了一个类似的问题,Fiddler显示我们的某个页面在Firefox和Chrome中加载了两次。解决方案是更改以下内容:
background-image:url('');

为了

background-image:none;

2

我也遇到了这个问题。在我的情况下,是firebug引起了额外的调用。


1

如果您启用了FireBug,请尝试将其关闭。


我花了3个小时来寻找答案。谢谢。 - Jack Pettinger

1
我也遇到了这个问题。我发现Firefox上的AVG杀毒软件工具栏会对该页面进行另一次访问,每次刷新会有两次访问。
只需转到“工具”>“附加组件”,如果您安装了AVG工具栏,请将其禁用。否则,可能是由其他防病毒软件或其他软件添加的扩展引起的。
祝好运!

0

带有空href的锚标签,即href = ""也是一个问题。在不需要URL的锚标签中使用href =“#”


在另一个页面中,我嵌入了具有空src属性的Object标签,即 src=""。这也是一个问题。因此,我可以得出结论,任何空的url引用,无论是src、url、href等,都是罪魁祸首 :) - anand

0
最有可能的原因是您调用了该过程两次。

我也这么想。但是在page_load事件中,除了为我的SQL数据源设置@id参数之外,我没有做任何事情。 - The_AlienCoder
尝试记录调用,以便在它被调用时能够看到。 - Colin Newell
你不会相信,但问题似乎出在Mozilla Firefox上。该页面在IE和其他浏览器中运行良好...看起来Mozilla正在向服务器发出重复的调用!!...有没有人遇到过这样的情况?(FF发出重复调用) - The_AlienCoder
你可能需要更新你的主要问题,这样人们就可以看到实际问题。我建议你安装Firefox的Firebug插件,并查看网络流量以了解发生了什么。我的一个猜测是重定向,但说实话我不确定。 - Colin Newell

0
通常页面加载两次的原因是在ascx/aspx中设置了AutoEventWireup=true,并且在代码后台将Load事件显式绑定到Page_Load方法。但是这种行为应该在所有浏览器中都能看到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接