2010-01-16 110 views
0

我最近决定尝试使用MVC 2来自webforms背景,在尝试找出缓存提供给部分内容的数据的最佳实践解决方案时遇到了一些麻烦查看(用户控制)。ASP.NET MVC 2用户控件缓存

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

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

请指教:-)

干杯,A

+0

为什么不缓存模型呢?这样,您就不必在每次加载页面时转到数据库。 – 2010-01-18 08:36:53

回答

4

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

有一些聪明的技巧来利用ASP.NET的输出缓存,像Donut CachingDonut Hole Caching,但他们都违反了MVC模式(通过使DAL波及到的意见,例如),是很难得到正确的展览事实上没有记录的行为。 (参见在博客帖子的评论和其他职位这里SO获得更多信息。)

简短的回答是,视图级缓存(即高速缓存的局部视图或视图,而不是一个操作方法)是您不想参加的旅程,如果您不熟悉ASP.NET MVC。因此,您应该缓存在您的DAL中,或缓存在您的操作方法中。

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

+0

非常感谢,似乎我从错误的天使看问题。出于兴趣,System.Web.Cache是​​一种可伸缩的缓存机制?使用我的Web应用程序,我可以同时存储大约100,000个LINQ-to-SQL对象。 – romiem 2010-01-18 09:40:52

+1

System.Web.Cache具有*非常高的性能和可扩展性。不过,它不支持分配。 如果您正在缓存Linq-To-SQL对象,请小心意外缓存EntityRefs和EntitySets。 – bzlm 2010-01-18 15:30:50