2013-02-20 31 views
7

Tôi đang sử dụng ASP.NET MVC Wrapper trong ứng dụng MVC4.Làm thế nào để vô hiệu hóa bộ nhớ cache "Đọc" Yêu cầu trong Nguồn dữ liệu UI Kendo

Mọi thứ hoạt động tốt bên cạnh một vấn đề cụ thể: Tôi đã xác định nguồn dữ liệu cho Lưới giao diện người dùng Kendo và khi lượt xem tải, hành động đọc được gọi như mong đợi.

Tuy nhiên, khi trang tải lại, yêu cầu "đọc" nhận được phản hồi với kết quả 304.

Làm cách nào để tắt bộ nhớ cache thông qua cấu hình nguồn dữ liệu?

Trả lời

0

Không thể là bộ điều khiển thông qua cấu hình Datasource. Bạn sẽ phải áp dụng một thuộc tính cho phương thức Read trên bộ điều khiển để ngăn chặn bộ nhớ đệm.

Cách khác là áp dụng thuộc tính [HttpPost] cho phương thức điều khiển của bạn. Sau đó, cấu hình nguồn dữ liệu để KHÔNG sử dụng phương thức GET, trong trường hợp này nó sẽ mặc định sử dụng phương thức POST.

+0

Tôi không thấy bất kỳ thuộc tính liên quan đến bộ nhớ đệm nào cho tác vụ Đọc trong trình bao bọc nguồn dữ liệu – ZENIT

+0

có ý tôi là ... bạn không thể kiểm soát bộ nhớ đệm thông qua cấu hình Datasource ... thông qua trình bao bọc ... bạn phải xác định các thuộc tính trên hành động Read controller mà trình bao bọc đang gọi. –

+0

Để giải quyết sự cố, tôi đang sử dụng quá tải 'Read' với' routeValues' và sau đó chuyển giá trị ngẫu nhiên cho thuộc tính không tồn tại (ví dụ: chế nhạo '& _ = 1234567890') – ZENIT

8

.Read (đọc => read.Action ("Action", "điều khiển", mới {diện tích = "Area"}). Loại (HttpVerbs.Post))

+0

Đây là cách chính xác để nói với lưới kendoui của bạn để truy vấn nguồn dữ liệu mỗi khi nó hiển thị dữ liệu. Ngoài ra, bạn không phải đánh dấu hành động điều khiển của mình để chấp nhận bài đăng. – cobolstinks

+0

Làm việc như một sự quyến rũ. Tôi đã thử [OutputCache (Duration = 0, NoStore = true)], tôi đã thử làm mới lưới, chuyển bộ nhớ đệm tắt ở cấp độ Kendo (MVC), nhưng ngay sau khi tôi thực hiện chức năng điều khiển chú thích [HttpPost], tất cả các vấn đề (bao gồm cả phân trang) đã được giải quyết. Tôi có thể dễ dàng lãng phí thêm 4 ngày nữa. Arigatou. –

12

Bạn có thể thiết lập các ' cache 'thuộc tính trong Kendo dataSource của bạn để sai, mà rõ ràng (LƯU Ý: Tôi đã không được thử nghiệm này) sẽ buộc các trang yêu cầu (s) mới được lấy trên mỗi yêu cầu.

Đặt bộ nhớ cache thành false nối tham số "_ = [TIMESTAMP]" vào yêu cầu, nếu cần thiết có thể được phân tích cú pháp trên phía máy chủ/bộ điều khiển để tránh các thao tác bộ nhớ cache phía máy chủ.

Lưu ý rằng bạn có thể chỉ định hành vi bộ nhớ cache cho mỗi thao tác vận chuyển Kendo (nghĩa là nó có thể ở cấp độ hoạt động CRUD hoặc cho toàn bộ quá trình vận chuyển).

Xem ở đây: http://docs.kendoui.com/api/framework/datasource#configuration-transport.read.cache-Boolean

Code:

transport: { 
    read: { 
     cache: false 
    } 
} 
+1

Tôi sẽ thay đổi ý tưởng của mình thành người dùng Kendo UI Grid vì có một số lỗi khi thay đổi chỉ mục trang trên lưới. Nó vừa trở lại trang 1 khi tôi cố thay đổi chỉ mục trang. Cảm ơn câu trả lời của bạn. –

+1

Nói ở trên rằng anh ấy sử dụng trình bao bọc MVC. Tùy chọn này không khả dụng khi sử dụng trình bao bọc. – Phil

+0

Tuyệt vời, Tiết kiệm thời gian của tôi..Cảm ơn bạn đã nghiên cứu tuyệt vời –

3

Bạn có thể thử trang trí trên hành động phía máy chủ điều khiển của mà tải xem với

[OutputCache(Duration = 0, NoStore = true)] 

thuộc tính, ví dụ

public class OrdersController : Controller 
{ 
    [httpGet] 
    [OutputCache(NoStore = true, Duration = 0)] 
    public ActionResult Orders(string userId) 
    { 
     // your code 
     return View(viewModel); 
    } 
} 

NoStore - Giá trị Boolean xác định có ngăn không cho lưu trữ thứ cấp thông tin nhạy cảm Duration - Thời gian, tính bằng giây, trang hoặc điều khiển người dùng được lưu trong bộ nhớ cache. Đặt thuộc tính này trên trang hoặc điều khiển người dùng thiết lập chính sách hết hạn cho phản hồi HTTP từ đối tượng và sẽ tự động lưu vào bộ nhớ cache của trang hoặc đầu ra điều khiển người dùng.

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