2009-07-27 43 views
15

Có một vài câu hỏi tương tự được đăng ở đây nhưng không có câu hỏi nào thực sự đáp ứng nhu cầu của tôi.Trang làm mới nút quay lại

Tôi có một danh sách các mục trên một trang, cho phép gọi nó là masterlist.aspx. Nếu tôi nhấp vào một trong những mục danh sách này, một trang khác sẽ xuất hiện, ví dụ: details.aspx? Id = something.

Trang xuất hiện có điều khiển chế độ xem ở chế độ chỉnh sửa. Nếu người dùng muốn chỉnh sửa dữ liệu, họ nhấn vào nút liên kết chỉnh sửa và biểu mẫu được gửi vào chế độ chỉnh sửa, sau đó họ chỉnh sửa dữ liệu và nhấp vào nút lưu, lưu dữ liệu và đặt chế độ xem lại ở chế độ xem.

Vấn đề là nếu người dùng sử dụng nút quay lại của trình duyệt để quay lại trang masterlist.aspx trang không được cập nhật, nó sẽ bị xóa khỏi bộ nhớ cache của trình duyệt.

Tôi đã phát xung quanh với cài đặt bộ nhớ cache tiêu đề HTTP nhưng không thể tải bất kỳ thứ gì hoạt động trên tất cả các trình duyệt chính. Trên một số trình duyệt, tôi nhận được cảnh báo hết hạn trên trang web. Một tùy chọn khác là bằng cách nào đó kích hoạt làm mới trang (hoặc làm mới một phần trang) khi trang tải bằng mã phía máy khách, nhưng tôi không thể tìm ra cách thực hiện việc này.

Có cách tiếp cận nào khác hoặc có ai thành công với hai cách tiếp cận ở trên hoặc có cách nào đó để tránh hoàn toàn vấn đề.

+0

Điều này là do ASP.net sử dụng biểu mẫu POST chứa toàn bộ trang. Tôi không biết cách sửa lỗi này, nhưng nó có thể giúp bạn. –

Trả lời

31

Tôi phải làm điều gì đó như thế này trong danh mục nơi trang duyệt cần được tải từ DB trên mỗi lần tải vì khi bạn nhấn vào trang sản phẩm, nó sẽ gọi cho bên thứ ba để nhận thông tin cập nhật và sau đó lưu nó nếu nó cần được cập nhật. Điều này là như vậy khi bạn nhấn nút quay lại như bạn đang nói dữ liệu được tải lại. Những gì tôi đã làm được thêm vào trang này và nó có vẻ hoạt động tốt trong tất cả các trình duyệt.

public class ProductBrowser : Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetNoStore(); 
     Response.Cache.SetExpires(DateTime.MinValue); 

     base.OnInit(e); 
    } 
} 
+0

làm việc cho đồng nghiệp của tôi trong chrome và tức là 6. – Merritt

+0

Cảm ơn vì điều đó - chúng tôi đã thử điều này trước một số lần. Hoạt động trong Firefox và IE9. – penderi

0

Điều gì về việc nắm bắt sự kiện nhấn nút Quay lại, sau đó thay vì cho phép nó thực hiện một browser.history.back(), bạn có thể thực hiện cuộc gọi document.location (...).

Ngoài ra, bạn có thể nắm bắt sự kiện quay lại và kích hoạt hậu hậu, có thể thực hiện phản hồi.Redirect ("trang của bạn"). Điều này sẽ buộc trình duyệt đưa ra câu lệnh GET cho trang được chỉ định và làm cho nó làm mới

0

Với Javascript, giải pháp hoàn chỉnh có thể không thực hiện được, nhưng có cách giải quyết khác.

http://www.boutell.com/newfaq/creating/backbutton.html

Nó sử dụng một hàm thời gian chờ mà nhiều lần buộc trình duyệt để thực hiện một hành động 'Chuyển tiếp'. Ngay cả khi ai đó nhấp vào nút Quay lại, nó sẽ đưa trở lại trang thực tế, do đó vô hiệu hóa hoạt động Quay lại. Nó có thể gây ra một nhấp nháy mặc dù.

+0

Hãy cẩn thận với phương pháp này nếu bạn có bất kỳ yếu tố biểu mẫu nào trên trang (như biểu mẫu đăng nhập). Nó có khả năng làm mới trang trong khi người dùng đang nhập vào các trường. –

0

Tôi đã phát xung quanh với cài đặt bộ nhớ cache tiêu đề HTTP nhưng không thể tải bất kỳ thứ gì hoạt động trên tất cả các trình duyệt chính. Trên một số trình duyệt, tôi nhận được cảnh báo hết hạn trên trang web.

Làm thế nào để bạn truy cập trang danh sách chủ đó? Nếu bạn phát hành HTTP GET ngăn khách hàng và proxy lưu vào bộ nhớ cache thì bạn sẽ không gặp vấn đề gì khi điều hướng trở lại (và vẫn nhận được phiên bản cập nhật).

Điều đó khiến bạn có bộ đệm ẩn phía máy chủ (có hiệu lực hợp lệ khi bất kỳ mục nào trong số những mục đó thay đổi) hoặc không có bộ nhớ đệm nào cả.

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