You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Link标签HREF设为#时Page Load事件触发两次的问题

问题:href="# 的link标签导致Page Load事件触发两次

当把link标签的href设为#时(比如用来替代真实的shortcut icon或stylesheet以避免JavaScript警告),会导致ASP.NET页面的Page Load事件执行两次——不管是rel="shortcut icon"还是rel="stylesheet"类型的link标签,都会出现这个问题。

原因分析

  • 浏览器会主动请求link标签href指向的资源,当href值为#时,浏览器会将其解析为当前页面的锚点,进而再次发起对当前页面的完整请求,服务器端因此会两次触发Page Load事件。
  • 对于shortcut icon、stylesheet这类浏览器默认会加载的资源,只要href指向的是当前页面相关的地址,就会触发重复请求。

解决办法

1. 直接移除不必要的link标签

如果只是为了避免JS警告,直接删掉这类没有真实资源指向的link标签是最直接的方式——毕竟没有实际资源需要加载时,这类标签并非必须。

2. 使用空资源地址替代#

可以把href设为不会触发页面请求的空资源地址,比如:

  • 针对shortcut icon:<link rel="shortcut icon" href="data:,">(利用空data URI,浏览器会加载一个空资源)
  • 针对stylesheet:<link rel="stylesheet" href="data:text/css,">
    这种方式既能保留link标签,又不会触发页面重复请求。

3. 指向真实的占位资源

如果必须保留link标签,可以准备一个真实的占位资源:比如1x1的透明图标文件、空的CSS文件,将href指向这些静态资源。浏览器请求静态资源时,不会触发ASP.NET页面的Page Load事件。


示例HTML代码

<!doctype html>
<html lang="en">
<head runat="server">
    <title>My Example</title>
    <!-- 此link标签的href=#会触发Page load事件执行两次 -->
    <link rel="shortcut icon" href="#">
</head>
<body>
    <form id="form1" runat="server">
        <h1>My Example</h1>
    </form>
</body>
</html>

示例VB.NET后台代码

Partial Class myexample
    Inherits System.Web.UI.Page

    Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        ' 此方法会被触发两次
    End Sub
End Class

同样存在问题的stylesheet标签示例

<link rel="stylesheet" href="#" />  

内容的提问来源于stack exchange,提问作者ptownbro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:52:18