【发布时间】:2014-09-06 01:47:40
【问题描述】:
我正在开发一个也有一些 angularJS 的 ASP.NET MVC 应用程序。我有一个主页,其中包含不同的选项卡,当您单击它们时,它们会加载有角度的局部视图。主页是这样的:
{ ... }
<div class="widget-div" ng-controller="mainController">
<div class="widget-body">
<div class="tabs-left">
<ul id="demo-pill-nav" class="nav nav-tabs tabs-left" style="width: 160px">
<li ng-class="getMenuClass('/search')">
<a href="javascript:void(0);" ng-click="selectPage('search')">Search</a>
</li>
<li ng-class="getMenuClass('/addressVerification')">
<a href="javascript:void(0);" ng-click="selectPage('addressVerification')">Address Verification</a>
</li>
<li ng-class="getMenuClass('/dashboard')">
<a href="javascript:void(0);" ng-click="selectPage('dashboard')">Dashboard</a>
</li>
<li ng-class="getMenuClass('/editProfile')">
<a href="javascript:void(0);" ng-click="selectPage('editProfile')">Update Profile</a>
</li>
</ul>
<div class="tab-content">
<div class="active tab-pane">
<ng:view />
</div>
</div>
</div>
</div>
</div>
{ ... }
在主控制器中,selectPage 方法如下所示:
$scope.selectPage = function (page) {
//not relevant code removed here
$location.path("/" + page);
};
当然,我已经定义了如下路线:
$routeProvider.when("/search", {
templateUrl: "/Scripts/app/views/search.html"
});
现在,我需要的是这些局部视图不会被缓存,至少在开发过程中是这样。为此我使用了here提供的方法:
myApp.run(function($rootScope, $templateCache) {
$rootScope.$on('$viewContentLoaded', function() {
$templateCache.removeAll();
});
});
除了在 Internet Explorer 中运行良好外,它总是会加载缓存的版本,即使按下 Ctrl+F5 也是如此。
另外,我尝试在布局 html 中设置 HTTP 标头,如下所示:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
但这没有用。
所以我的问题是是否有任何方法可以避免这种行为。
【问题讨论】:
-
那些元标记只为 layout.html 文件本身设置缓存。您需要为来自服务器的响应设置缓存标头
-
但是 _Layout.cshtml 是包含 html 头的文件,其他 html 文件只是部分视图。那我应该把这些行放在哪里?
-
您将无法为此使用元标记。元标记只会在提供给浏览器的原始页面上读取(与视图完全分开)。您需要使用 ASP.NET 来修改响应标头并为部分设置这些值
-
这些部分视图由 angularJS 提供,我不知道在这种情况下该怎么做。
-
我会看看这个:stackoverflow.com/questions/2195266/… - 你可以定位
/Scripts/app/views目录
标签: javascript asp.net-mvc angularjs caching browser-cache