我有一个动作方法,我需要在单击后退按钮时执行。我之前通过在我的操作方法中禁用缓存(Response.Cache.SetCacheability(HttpCacheability.NoCache))来完成此操作。这不适用于不同的操作方法。出于某种原因,当我禁用缓存并点击后退按钮时触发我的操作方法页面过期。有关问题的任何想法可能是什么?
答案 0 :(得分:8)
尝试以下方法,对我很有用:
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var response = filterContext.HttpContext.Response;
response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
response.Cache.SetValidUntilExpires(false);
response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
response.Cache.SetCacheability(HttpCacheability.NoCache);
response.Cache.SetNoStore();
}
}
public class HomeController : Controller
{
[NoCache]
public ActionResult Index()
{
// When we went to Foo and hit the Back button this action will be executed
// If you remove the [NoCache] attribute this will no longer be the case
return Content(@"<a href=""/home/foo"">Go to foo</a><div>" + DateTime.Now.ToLongTimeString() + @"</div>", "text/html");
}
public ActionResult Foo()
{
return Content(@"<a href=""/home/index"">Go back to index</a>", "text/html");
}
}
答案 1 :(得分:1)
在服务器端,无法知道页面请求是否是后退按钮的结果。
很可能,之前的请求是帖子而不是获取,帖子要求您重新发布数据。