ASP.NET MVC 2用户控件缓存

时间:2010-01-16 14:56:29

标签: asp.net-mvc caching user-controls

我最近决定尝试MVC 2并且来自webforms背景,我在尝试找出提供给部分视图(用户控件)的数据的最佳实践解决方案时遇到了一些麻烦。

在我的webforms应用程序中,我有一个AccountSummary.aspx页面,它有一个Booking.ascx控件。 Booking.ascx的输出缓存为300秒,在AccountSummary.aspx的Page_Load中,我用来检查控件是否为null,如果没有,则传递给UserId。然后在Booking.ascx的代码隐藏中,我曾经进行数据访问调用以获取所有预订,因此每300秒最多拨打一次预订。

我想在MVC2中实现相同的目标,但我似乎无法找到实现此目的的最佳方法,因为Web上的所有示例似乎都将数据传递给RenderPartial HTML帮助器方法中的用户控件(我不想要,因为在每个页面加载我都必须通过预订信息,这将杀死我的数据库!)

请告知: - )

干杯,A。

1 个答案:

答案 0 :(得分:4)

ASP.NET MVC 2中没有简单的视图级缓存机制

有一些聪明的技巧可以利用ASP.NET中的输出缓存,例如Donut CachingDonut Hole Caching,但它们都违反了MVC模式(通过制作DAL例如,溢出到视图中,非常难以正确表现出几乎没有文档记录的行为。 (有关详细信息,请参阅博客文章中的评论以及此处的其他帖子。)

简短的回答是视图级缓存(即缓存局部视图或视图,而不是操作方法)是您不想开始的旅行< / strong>如果您是ASP.NET MVC的新手。因此,您应该在DAL中缓存,或者在您的操作方法上缓存。

在您的示例中,您可以在操作方法上使用OutputCacheAttribute返回带有预订列表的部分视图,或者您可以使用System.Web.Cache来缓存预订列表DAL。