【问题标题】:How to completely refresh (ctrl+f5) a page using asp.net?如何使用 asp.net 完全刷新(ctrl+f5)页面?
【发布时间】:2011-08-19 18:07:00
【问题描述】:

我现在正在处理一个 asp.net (Dotnetnuke) 项目。我需要动态更改页面中的图像。单击替换按钮 (asp:Button) 时,有时图像无法在页面上动态替换。当按下 ctrl+F5 时,它会改变。我的问题是,如何通过 C# 代码重新加载缓存?

另一个问题是,有时我通过将一些值存储到数据库来替换页面中的图像,然后按 ctrl+F5 在页面中进行更改,但同时点击 ctrl+F5 会显示一个带有取消或重试按钮的对话框(在 Firefox 和 IE 上)。单击其中任何一个都会将相同的值存储到数据库中。如果我们再次刷新页面,数据库中的值是 3 次。

【问题讨论】:

  • 这就像问如何使用洗车场梳头;) 您可以使用 javascript 的location.reload() 刷新页面,但不会影响浏览器缓存。您可以通过在图像上设置 HTTP 标头或使用不同的 GET 字符串请求图像来防止浏览器缓存。
  • 如果您解释您实际尝试做的事情(即:最终结果),我们或许可以为您提供一些关于可能更好的方法的见解。
  • 最后我得到了确切的问题。如何使用 javascript 或 c# 清除缓存?

标签: javascript asp.net dotnetnuke


【解决方案1】:

你无法清除浏览器缓存。唯一的想法是在页面加载的c#代码中声明一个会话变量,并在第一次将其值设置为1

if (!IsPostBack)
            {
Session["refresh"]="1"
}

您需要在图片上传按钮事件 Session["refresh"]="1" 中设置会话变量 然后创建一个刷新按钮。在按钮事件中执行以下操作 就是这样。完成上传后,单击刷新按钮。然后它作为 ctrl+f5 按钮工作。如果你没有在刷新按钮事件中设置会话值 0,最后一个事件再次发生。如果你在数据库中输入一个值,如果您不设置会话变量 0,则会发生相同的任务。

   if(Session["refresh"].ToString()=="1")
   {
      Response.Write("<script type='text/javascript'>locaton.reload()</script>");
      Session["refresh"]="0";
    }

【讨论】:

    【解决方案2】:

    JavaScript 无法访问为您转储缓存,抱歉。 C# 运行服务器,而不是客户端,所以它也无济于事。

    如果你想打破页面中某些项目的缓存,你可以添加一个随机参数

    &lt;img src="a.gif?x=123456"&gt;(我喜欢用时间戳)

    或者,如果这是出于测试目的,请关闭浏览器中的缓存。

    【讨论】:

    • 图片是动态的。所以我不能使用上面的。如何使用javascript或c#清除缓存?
    【解决方案3】:

    您可以通过管理用户控件来操作网页各个部分的缓存特性。还要检查你的页面指令。

     <%@ OutputCache Duration="#ofseconds" Location="Any | Client | Downstream | Server | None" Shared="True | False" VaryByControl="controlname" VaryByCustom="browser | customstring" VaryByHeader="headers" VaryByParam="parametername" %>
    

    ASP.NET 的缓存功能非常广泛。我建议您花一些时间研究应用程序Directives;主要是 Page 和 Control。

    【讨论】:

    • Dotnetnuke 提供了上面的缓存选项,所以我不确定为什么将您的选项限制为自定义代码。我在本地缓存广告时遇到问题,并通过上述方法解决。每个广告空间都必须由它自己控制。
    猜你喜欢
    • 2011-12-14
    • 2010-10-30
    • 2020-12-25
    • 2011-09-13
    • 1970-01-01
    • 2011-05-13
    • 2022-11-07
    相关资源
    最近更新 更多