【问题标题】:Browser does not fetch page or link not working if link is to current page如果链接指向当前页面,浏览器不会获取页面或链接不起作用
【发布时间】:2014-02-20 15:08:47
【问题描述】:

如果链接指向当前页面,浏览器不会获取页面或链接不起作用。在下面的代码示例中,我有一个链接(在菜单中)。如果用户当前在 GetData 页面中,并且用户再次单击“Get Data”链接,则没有任何反应。浏览器不会尝试检索页面。我在 IE8 和 Chrome 开发人员工具中对此进行了监控。有什么想法吗?

//Link
<a href="@Url.Action("GetData", "Data")"><i class="glyphicon glyphicon-tag"></i>Get Data</a>

//Controller has a custom Authorization attribute
[AuthorizeRedirect]
public class DataController : Controller

// Controller Action Invoked
[HttpGet]
public ActionResult GetData(int parameter)
{
   ...
}

我从头开始创建了一个测试 Web 应用程序,即使单击指向当前加载页面的链接,页面也会刷新。

我比较了应用程序和测试应用程序的响应标头,发现缓存标头有所不同。

我的应用程序包含以下内容:

Cache-Control:no-cache, no-store

虽然我的测试应用程序仅包含以下内容:

Cache-Control:private

附加信息:我正在使用 Angular JS 和 Bootstrap 客户端。

【问题讨论】:

  • 看起来这个问题与 ng-grid 有关。我用 Angular js 创建了另一个控制器和相应的页面,没有 ng-grid,它的页面在单击当前页面的链接时刷新。当我添加一个简单的 ng-grid 时,单击该链接什么也不做。

标签: html asp.net asp.net-mvc internet-explorer google-chrome


【解决方案1】:

我认为这是因为浏览器的缓存而发生的。清除浏览器缓存并重试。希望能帮到你

【讨论】:

  • 我已多次清除浏览器缓存并出现相同的行为
【解决方案2】:

如何在Global.asax 中的Application_PreSendRequestHeaders 事件中设置标头?

你可以使用Response.Cache.SetCacheability而不是直接设置Headers。*

void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
}

通过手动设置标题的替代方式。

void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
    Response.Headers.Set("Cache-Control", "no-cache");
}

如果您不想到处都没有缓存,那么您可以尝试这样的事情:

[OutputCache(Location = OutputCacheLocation.None)]
public class HomeController : Controller
{
...
} 

【讨论】:

  • 我都已经做了,但还是不行。奇怪的是,在我的应用程序中,我创建了一个新控制器(具有相同的类和操作级别属性),添加了一个新页面。但是在新页面/控制器上,如果我点击指向我当前所在页面的链接,页面就会刷新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2013-08-14
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多