2010-11-04 48 views
9

Tôi hiện đang phát triển một trang web bằng cách sử dụng asp.net mvc 2 trong C#. Tôi chưa bao giờ sử dụng tính năng lưu trong bộ nhớ đệm trong MVC và muốn áp dụng nó vào trang hồ sơ người dùng. Nội dung trên trang này hiếm khi thay đổi và phần duy nhất cần có trong thời gian thực là danh sách các bài đăng gần đây của người dùng. (Tôi sử dụng linq-to-sql để tải dữ liệu từ cơ sở dữ liệu)Asp.net MVC 2 caching

Tôi cần một số gợi ý về kỹ thuật bộ nhớ đệm nào tôi nên sử dụng và cách triển khai?

Cập nhật: Giải pháp của Xandy dưới đây hầu như hoạt động, ngoại trừ tôi không thể chuyển dữ liệu. Làm thế nào tôi sẽ viết lại bằng cách sử dụng? Html.RenderPartial ("UserPosts", ViewData ["UserPosts"])

+0

Xem thêm http://stackoverflow.com/questions/4082826/when-and-how-to-go-about-performing-caching-in-asp-net-mvc/4091232#4091232 –

+0

ai biết câu trả lời? để cập nhật của tôi? – Rana

+0

bạn cần sử dụng quá tải thứ tư cho RenderPartial (http://msdn.microsoft.com/en-us/library/dd470561.aspx) thử: 'Html.RenderPartial (" UserPosts.ascx ", Model.UserPosts, mới ViewDataDictionary {Model = Model.UserPosts} '. – RPM1984

Trả lời

1

ASP.Net có một tutorial on output caching for MVC.

Partial (aka Donut) Caching sẽ hoạt động với MVC2.

+0

Vâng, tôi đã thấy điều đó, nhưng làm thế nào tôi có thể cache trang trong khi tạo một phần của nó không được lưu trữ? – Rana

+0

trang tiếp theo của cuộc trò chuyện về bộ nhớ đệm một phần. http://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cs – xandy

+0

Đây có phải là phương pháp ưa thích trong MVC 2 không? – Rana

5

Như câu trả lời khác đã nêu, bánh rán bộ nhớ đệm "loại" công trình trong MVC.

tôi sẽ không khuyên bạn nên nó - thay vào đó tôi sẽ cung cấp một alterantive:

Bạn có một Xem cho người sử dụng hồ sơ, chúng ta hãy gọi nó là "UserProfile.aspx".

Giờ đây trên Chế độ xem này, bạn có một loạt HTML, bao gồm phần dành cho "bài đăng gần đây".

Bây giờ, tôi giả sử đây là một cái gì đó giống như 10 bài đăng cuối cùng cho người dùng.

gì tôi sẽ làm là đặt HTML này/phần vào một Xem phần, và phục vụ nó thông qua một phương pháp hành động riêng biệt, hay còn gọi là một PartialViewResult :

public class UserProfileController 
{ 
    [HttpGet] 
    [OutputCache (Duration=60)] 
    public ActionResult Index() // core user details 
    { 
     var userProfileModel = somewhere.GetSomething(); 
     return View(userProfileModel); 
    } 

    [HttpGet] 
    public PartialViewResult DisplayRecentPosts(User user) 
    { 
     var recentPosts = somewhere.GetRecentPosts(user); 
     return PartialViewResult(recentPosts); 
    } 
} 

Render ra Xem phần sử dụng jQuery:

<script type="text/javascript"> 
    $(function() { 
    $.get(
     "/User/DisplayRecentPosts", 
     user, // get from the Model binding 
     function (data) { $("#target").html(data) } // target div for partial 
    ); 
    }); 
</script> 

Bằng cách đó, bạn có thể tối đa OutputCache cho chi tiết cốt lõi (chỉ mục()), nhưng các bài đăng gần đây không được lưu trong bộ nhớ cache. (hoặc bạn có thể có một khoảng thời gian cache rất nhỏ).

Phương pháp jQuery hiển thị một phần khác với RenderPartial, vì cách này bạn đang phục vụ HTML trực tiếp từ bộ điều khiển, vì vậy bạn có thể kiểm soát bộ đệm đầu ra tương ứng.

Kết quả cuối cùng rất giống với bộ nhớ đệm donut (các phần của trang được lưu trong bộ nhớ cache, không có bộ nhớ cache khác).

+1

Vì vậy, những gì về khách hàng mà không có javascript? – xandy

+2

Đó có phải là một yêu cầu mà OP đã nêu không? – RPM1984