2008-08-22 34 views

Trả lời

6

Bạn có thể thử bằng cách sử dụng HttpResponse.Cache property nếu mà có thể giúp:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.VaryByParams["Category"] = true; 

if (Response.Cache.VaryByParams["Category"]) 
{ 
    //... 
} 

Hoặc có thể có thể chặn bộ nhớ đệm của trang hoàn toàn với HttpResponse.CacheControl, nhưng nó được phản đối ủng hộ tài sản bộ nhớ cache trên:

Response.CacheControl = "No-Cache"; 

Edit: thực sự go nuts và OR bạn có thể làm tất cả bằng tay:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
0

Cách tốt nhất để giải quyết vấn đề này là có thể đặt chỉ thị không có bộ nhớ cache trong các trang ASP.NET của bạn (hoặc trang chính nếu bạn đang sử dụng một trang). Tôi không nghĩ rằng có một cách để đối phó với điều này trực tiếp trong mã ASP.NET của bạn (kể từ khi quyết định bộ nhớ cache đang xảy ra trên máy khách).

Đối với MVC, không biết bạn sẽ thực hiện điều đó như thế nào (giả sử nó khác với ASP.NET dựa trên biểu mẫu web); Tôi đã không sử dụng nó.

6

Theo như tôi biết (hoặc ít nhất là đã đọc) là hết sức mình để cố gắng không làm việc để đáp ứng với sự kiện người dùng, nhưng thay vì nghĩ "trong trang" ..

Kiến trúc sư ứng dụng của bạn để nó doesn 't chăm sóc nếu nút quay lại được đẩy .. Nó sẽ chỉ đối phó với nó .. Điều này có thể có nghĩa là thêm một chút công việc từ một điểm phát triển của xem, nhưng tổng thể sẽ làm cho ứng dụng mạnh mẽ hơn rất nhiều ..

Tức là nếu bước 3 thực hiện một số chages dữ liệu, sau đó người dùng nhấp lại (để bước 2) và nhấp tiếp theo lần nữa, sau đó ứng dụng sẽ kiểm tra xem các thay đổi đã được thực hiện hay chưa. Hoặc lý tưởng, không thực hiện bất kỳ thay đổi nào cứng cho đến khi người dùng nhấp vào "OK" ở cuối .. Bằng cách này, tất cả các thay đổi được lưu trữ và bạn có thể điền lại biểu mẫu dựa trên các giá trị đã nhập trước đó khi tải, mỗi lần ..

Tôi hy vọng điều đó có ý nghĩa:)

+0

-1 Một câu trả lời lý tưởng hơn là câu trả lời thực dụng. Một số ứng dụng đã được giải thích một cách cụ thể ngay từ đầu, khi làm việc trong một nhóm lớn với ngân sách eo hẹp, nó sẽ là một bán khá khó khăn để chìm tài nguyên vào việc thay đổi kiến ​​trúc mà không có bất kỳ lợi ích rõ ràng nào cho các bên liên quan. Bên cạnh đó điều này không thực sự trả lời câu hỏi. –

2

RFC 2616 §13.13 nói rằng History và Cache là những thứ khác nhau. Chắc chắn không có cách nào để cache ảnh hưởng đến nút Back.

Nếu bất kỳ kết hợp tiêu đề HTTP nào ảnh hưởng đến nút Quay lại, đó là lỗi trong trình duyệt… với một ngoại lệ.

Trong HTTP S trình duyệt giải thích Cache-control: must-revalidate làm yêu cầu làm mới trang khi nút Quay lại được sử dụng (Mozilla gọi nó là "chế độ ngân hàng ngớ ngẩn"). Điều này không được hỗ trợ trong HTTP thuần túy.

0

Các mã sau đây làm việc cho tôi trong IE9 +, FF21 và Chrome mới nhất:

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private); 
Response.Cache.AppendCacheExtension("must-revalidate"); 
Response.Cache.AppendCacheExtension("max-age=0"); 
Response.Cache.SetNoStore(); 

Bạn có thể đặt này trong Page_Load() xử lý sự kiện trong MasterPage để mỗi trang trong ứng dụng của bạn yêu cầu khứ hồi đến máy chủ khi nhấn nút quay lại.

Các vấn đề liên quan