gpt4 book ai didi

asp.net - 迁移的 Web 窗体应用程序 .NET 2.0 -> 3.5,新基础架构 - IE 6 中的图像未缓存

转载 作者:行者123 更新时间:2023-12-04 06:30:34 25 4
gpt4 key购买 nike

我一直在迁移 .NET 2.0 Web 表单应用程序以使用 .NET 3.5 和新的基础架构。 UpdatePanel 中有一个 GridView,其中有一个 Actions 列,其中包含为该行执行操作的图标。我在 IE 6 中遇到的一个问题是图像没有缓存。这在 Actions 列上尤为明显,因为要加载 9 个图标 x 100 行 = 900 个图标。 Internet Explorer 将这些图像从 900 倒计时,直到它们全部加载完毕。

此问题似乎不限于 UpdatePanel 内的 GridView 内的图像,因为我可以看到每次刷新页面时重新加载标题图像。

我做了我的研究:

  • Anyone have ideas for solving the "n items remaining" problem on Internet Explorer? - 这是一个不同的问题。
  • Dear IE6: Please Cache my Images. - 我确实认为这可以解决所有问题,但没有。我曾尝试将图像设置为 div 中的背景图像,但没有成功。我还尝试将所有图标放在用户控件中,并在加载 GridView 之前将其包含在内。
  • 我有一个旧的基础设施(不存在这个问题)来比较 IIS 配置,它们完全相同。
  • 使用 Fiddler,我可以看到请求的每个图像令人沮丧。缓存头是 Cache-Control: private .刚注意到Date: Tue, 29 Mar 2011 07:35:53 GMT (一小时前)在这个缓存头中。跟这有关系吗?
  • 此缓存问题似乎是间歇性的。我将第一次加载页面,不会缓存任何图像,因此将独立加载约 1000 张图像。我可能会刷新页面,图像将被缓存。如果我删除所有临时文件/离线内容,则图像将再次独立加载。
  • 起初,我认为这只会在将应用程序部署到新基础架构时发生(请求跨林),但当所有图像都是本地时,它也会发生在我的本地机器上。
  • 这只是 IE 6 中的问题!!!

  • 如果我能提供其他信息,请告诉我。

    更新 1

    已经尝试过但没有成功的解决方法:
  • @Afshin Gh 提出的处理程序解决方案。 更新 2 答案中的代码实际上有效。之前必须尝试过不同的版本。
  • @Blue Steel 提出的隐藏图像解决方案。

  • 更新 2

    其他一些解决方案可能在这里有效,但我使用了@Afshin Gh 提供的代码。

    最佳答案

    使用这个处理程序:

    Public NotInheritable Class ImageHandler
    Implements IHttpHandler

    Private Const REQUEST_KEY As String = "pic"

    Public ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
    Get
    Return False
    End Get
    End Property

    Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
    If Not String.IsNullOrEmpty(context.Request.QueryString(REQUEST_KEY)) Then
    Dim fileName As String = context.Request.QueryString(REQUEST_KEY)

    Try

    Dim fileInfo As New IO.FileInfo(context.Server.MapPath(fileName))

    If fileInfo.Exists Then
    context.Response.Cache.SetCacheability(HttpCacheability.Public)
    context.Response.Cache.SetExpires(Date.Now.AddYears(1))

    Dim fileExt As String = fileInfo.Extension.Remove(0, 1).ToUpperInvariant

    If fileExt = "JPG" Then
    context.Response.ContentType = "image/jpeg"
    Else
    context.Response.ContentType = "image/" & fileExt
    End If

    context.Response.TransmitFile(fileInfo.FullName)

    End If

    Catch ex As Exception
    End Try

    End If
    End Sub

    End Class

    在您的 web.config 中注册它:
        <httpHandlers>
    <add verb="*" path="image.axd" type="MyApp.ImageHandler, MyApp" validate="false"/>
    </httpHandlers>

    像这样使用它:
    <img src="image.axd?pic=/App_Themes/Modern/Logo.jpg" />

    关于asp.net - 迁移的 Web 窗体应用程序 .NET 2.0 -> 3.5,新基础架构 - IE 6 中的图像未缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469313/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com